当我发现如果您将NULL加字符串连接在一起时,我正在测试isNull
函数,例如:
SELECT isNull(NULL+'123456','I am a flag')
结果既不是“ 1234”也不是“ I is a flag”,而是“ I is a”。 结果的长度取决于连接字符串的长度。
我想知道原因。
答案 0 :(得分:4)
使用coalesce()
:
select coalesce(NULL + '123456', 'I am a flag')
ISNULL()
严格使用第一个参数的类型。 COALESCE()
更为宽容,基本上着眼于所有参数的类型以确定最终类型。另外,COALESCE()
是标准SQL。
答案 1 :(得分:4)
ISNULL
返回第一个表达式的数据类型。
在查询中,您有NULL+'123456'
,它是varchar(6)
和'I am a flag'
,是varchar(11)
。 NULL + {expression} = NULL
,因此返回第二个参数并将其隐式转换为varchar(6)
,得到'I am a'
(第二个表达式的前6个字符)。