第一种情况:
在这种情况下,为什么Case语句返回1作为输出。
首先我检查了这个查询:

DECLARE @VAR INT=0

SELECT CASE
         WHEN @VAR = ' ' THEN 1
         ELSE 0
       END as empty_string


输出:

empty_string
1


在这种情况下,我尝试这样:
第二种情况:
为什么在分配给本地变量时会有不同的值?

DECLARE @var1 INT =' '

SELECT @var1 AS empty_assighn

SELECT ' ' AS empty_string


输出:

empty_assighn
0
empty_string
-----------


然后我发现每当分配它时,将''(空字符串)作为零值。所以这就是为什么我在第一种情况下得到1作为输出的原因。但是为什么要这样呢?其背后的原因是什么?

提前致谢

最佳答案

因为,下面的查询返回0

SELECT CAST(' ' AS INT)


当您执行CASE WHEN @VAR = ' ' THEN 1检查时,条件的右侧将转换为变量的数据类型(INT)。因此条件结果为True

10-06 15:58