zoukankan      html  css  js  c++  java
  • SQL Server中NULL的一个测试

    我们都知道SQL Server中NULL是一个很特殊的存在,因为NULL不会等于任何值,且NULL也不会不等于任何值。对于NULL我们只能使用IS或IS NOT关键字来进行比较。

    我们先来看看下面一个SQL查询,由于NULL不会等于任何值,所以毫无疑问下面的查询会返回0:

    SELECT CASE WHEN NULL=1 THEN 1 ELSE 0 END

    输出结果:

    那么如果我们在上面查询的基础上,给判断条件NULL=1前加上NOT关键字效果如何呢?如下所示:

    SELECT CASE WHEN NOT NULL=1 THEN 1 ELSE 0 END

    输出结果:

    我们可以看到输出还是0,有些同学可能会觉得很奇怪,判断条件NULL=1不是返回False吗,那么NOT NULL=1应该返回True才对啊?那么我们试试在判断条件NULL=1前加两个NOT关键字试试:

    SELECT CASE WHEN NOT NOT NULL=1 THEN 1 ELSE 0 END

    输出结果:

    结果显示判断条件NOT NOT NULL=1,还是返回的False,事实上无论我们在NULL=1前面加多少个NOT关键字,判断条件NOT ... NOT NULL=1都会返回False。

    因为我们前面说了NULL不会等于任何值,且NULL也不会不等于任何值,所以除了用IS或IS NOT关键字来比较NULL,所有其它比较运算符对NULL进行的比较都是无效的,NULL会让整个表达式都返回False,所以无论我们在判断条件NULL=1前面加多少个NOT关键字都没有用,因为整个NOT ... NOT NULL=1表达式都会返回False。

    虽然上面我们看到NULL会让整个判断表达式都返回False,但是它并不会干扰由OR或AND关键字分隔的其它判断条件,例如:

    SELECT CASE WHEN (NOT NOT NULL=1) OR (1=1 AND 2=2) THEN 1 ELSE 0 END

    输出结果:

  • 相关阅读:
    windows service 安装和卸载指令
    jackson 进行json与java对象转换 之四
    jackson 进行json与java对象转换 之三
    jackson 进行json与java对象转换 之二
    jackson 进行json与java对象转换 之一
    jackson2.x与Jackson1.9的比较
    判断Integer值相等不能用==
    java:String使用equals和==比较的区别
    Java中自定义枚举(Enum)项的值,可设置为指定的值
    Java enum(枚举)使用详解之四
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10706879.html
Copyright © 2011-2022 走看看