最近,我遇到了一种情况,ISNULL如果第一个字符串为null ,函数将向我返回截断的数据。
ISNULL
ISNULL(a, b);
我发现a是5个字符,b是10个字符,但是当a为null时,它将仅返回b的5个字符而不是全长。
这是一个已知的问题?
这是一个已知的行为
从 MSDN
如果check_expression的值不为NULL,则返回该值;否则返回false。否则,如果类型不同,则将replace_value隐式转换为check_expression类型后返回。如果replacement_value的长度大于check_expression,则replacement_value可以被截断。
使用COALESCE超过走到这问题
COALESCE
SELECT COALESCE(a, b) From yourtable
这是一个演示
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
结果 :
╔═══════╦════════════╦═══════════════╦═════════════════╗ ║ a ║ b ║ Isnull_Result ║ Coalesce_Result ║ ╠═══════╬════════════╬═══════════════╬═════════════════╣ ║ 12345 ║ 1234567890 ║ 12345 ║ 12345 ║ ║ NULL ║ 1234567890 ║ 12345 ║ 1234567890 ║ ╚═══════╩════════════╩═══════════════╩═════════════════╝