回答

收藏

SQL Server中ISNULL函数的截断

技术问答 技术问答 129 人阅读 | 0 人回复 | 2023-09-13

最近,我遇到了一种情况,ISNULL假如第一个字符串是null 函数将返回到我的截断数据。
3 V7 b6 P8 m, D' S7 {; lISNULL(a,b);我发现a是5个字符,b是10个字符,但是当a为null它只会回来b五个字符不是全长。3 ^9 k) z0 H" s& ?
这是一个已知的问题吗?
5 F# \9 j% h2 ^4 r3 {% l) n                                                                . X- K% c* n& t
    解决方案:                                                                + V# a8 C! V/ \8 v# ]% P. m
                                                                这是一种已知的行为9 F  F6 g6 M' U- c
MSDN* p+ ^) q+ m& ~( N) k) l
如果check_expression的值不为NULL,否则返回值;否则返回false。否则,如果类型不同,就会replace_value隐式转换为check_expression类型后返回replacement_value的长度大于check_expression,则replacement_value可切断。1 v. L% o6 I4 r0 x- z# N
使用COALESCE超越这个问题; S. c% Z1 M9 J
SELECT COALESCE(a,b) From yourtable这是演示
8 x2 S; O& b' g$ C4 KCREATE TABLE #nulltest   (      a CHAR(5),      b CHAR(10)   )INSERT INTO #nulltest VALUES       (NULL,'1234567890')SELECT a,         b,       ISNULL(a,b)   AS Isnull_Result,       COALESCE(a,b) AS Coalesce_Result FROM   #nulltest结果 :
1 y& M" G1 v* I6 q+ |& w# c╔═══════╦════════════╦═══════════════╦═════════════════╗║   a   ║     b      ║ Isnull_Result ║ Coalesce_Result ║╠═══════╬════════════╬═══════════════╬═════════════════╣║ 12345 ║ 1234567890 ║     ║       12345                           ║║ NULL  ║ 1234567890 ║     ║   ║╚═══════╩════════════╩═══════════════╩═════════════════╝
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则