当我运行此查询时,我希望结果为' false'
IF isnull(0,'') = ''
select 'true'
else
select 'false'
但是sql Server告诉我' true'为什么?
答案 0 :(得分:2)
在这种情况下,print(a.resample('5ms').first().interpolate())
Value
Time
2016-01-23 00:00:00.000 1.0
2016-01-23 00:00:00.005 1.5
2016-01-23 00:00:00.010 2.0
2016-01-23 00:00:00.015 3.0
2016-01-23 00:00:00.020 4.0
返回一个整数。 SQL Server也会将第二个参数转换为整数,即0.因此0 = 0,因此结果为TRUE。直接与0比较也将返回true:
ISNULL(0,'')
像这样使用ISNULL和NULL是不寻常的。 IF 0 = ''
select 'true'
else
select 'false'
子句中的ISNULL(someColumn='')
函数会阻止优化器使用涵盖WHERE
的任何索引,从而强制扫描而不是索引搜索。
在SELECT中使用IF语句是不可能的。即使在CASE语句中,最好显式检查NULL而不是应用这样的转换。
答案 1 :(得分:2)
对于您的情况,比较两个值时,''
将首先转换为int
。以下内容:
SELECT CONVERT(INT, '')
返回0
,因此0=0
为真
如果您希望将0视为NULL
,则可以使用NULLIF
:
DECLARE @i INT = 0
IF NULLIF(ISNULL(@i, ''), 0) = ''
SELECT 'true'
ELSE
SELECT 'false'
这将返回'false'
答案 2 :(得分:0)
ISNULL是相同的,因此,在IF条件下它将为真,并且将打印选择“true”。