最近要给一个旧的项目加个新功能
就是在不同模式下通过灯的亮度判断属于什么状态
然后就要从数据库中去取数据,查找所有最大亮度和最小亮度不为空的灯
(最大最小亮度都是可空的两个int字段)
首先该表的部分字段是这样的:
刚开始写的语句是:
select tunnelLightNumber,maxBrightness,minBrightness from LightTunnel
where maxBrightness <> null and minBrightness <> null
然后发现返回结果居然是空
三条语句对比:
只有第一条判断 is not null的返回了我想要的结果,而直接判断<>和!=都是返回空
这个原因后来查了一下:
默认情况下,<> 和!=与null做运算返回的都是false
证明:
如上图,将第一个 is not null 改为了!=或<>都会导致返回null
而判断是否为空只能用 is not null 或者 is null,而不要使用!=,<>,=这些运算符号
或者还有另一种方法
就是关闭 set ANSI_NULLS off
这样返回的结果就是想要的了,是真的判断是否为空,而不是返回false