小编典典

SQL Server中ISNULL函数的截断问题

sql

最近,我遇到了一种情况,ISNULL如果第一个字符串为null ,函数将向我返回截断的数据。

ISNULL(a, b);

我发现a是5个字符,b是10个字符,但是当a为null时,它将仅返回b的5个字符而不是全长。

这是一个已知的问题?


阅读 262

收藏
2021-04-28

共1个答案

小编典典

这是一个已知的行为

MSDN

如果check_expression的值不为NULL,则返回该值;否则返回false。否则,如果类型不同,则将replace_value隐式转换为check_expression类型后返回。如果replacement_value的长度大于check_expression,则replacement_value可以被截断。

使用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 ║
╚═══════╩════════════╩═══════════════╩═════════════════╝
2021-04-28