Swa*_*nil 2 sql sql-server isnull
最近我遇到了一个场景,ISNULL如果第一个字符串为null ,函数将返回截断的数据.
ISNULL(a, b);
Run Code Online (Sandbox Code Playgroud)
我发现a是5个字符,b是10个字符,但是当a为null时,它只返回5个字符b而不是全长.
这是一个已知的问题?
这是一种已知的行为
来自MSDN
如果不是NULL,则返回check_expression的值; 否则,如果replacement_value被隐式转换为check_expression的类型,则返回replacement_value(如果类型不同).如果replacement_value长于check_expression,则可以截断replacement_value.
使用COALESCE过度来到这个问题
SELECT COALESCE(a, b) From yourtable
Run Code Online (Sandbox Code Playgroud)
这是一个演示
CREATE TABLE #nulltest
(
a CHAR(5),
b CHAR(10)
)
INSERT INTO #nulltest
VALUES ('12345','1234567890'),
(NULL,'1234567890')
SELECT a,
b,
ISNULL(a, b) AS Isnull_Result,
COALESCE(a, b) AS Coalesce_Result
FROM #nulltest
Run Code Online (Sandbox Code Playgroud)
结果:
????????????????????????????????????????????????????????
? a ? b ? Isnull_Result ? Coalesce_Result ?
????????????????????????????????????????????????????????
? 12345 ? 1234567890 ? 12345 ? 12345 ?
? NULL ? 1234567890 ? 12345 ? 1234567890 ?
????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)