gpt4 book ai didi

sql-server - 为什么 T-SQL ISNULL() 会截断字符串而 COALESCE 不会?

转载 作者:行者123 更新时间:2023-12-02 02:59:15 24 4
gpt4 key购买 nike

鉴于以下情况:

SELECT ISNULL('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABC (Why?)
SELECT COALESCE('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABCDEFGHIJ

为什么这些语句返回不同的结果?

最佳答案

根据 Microsoft documentation ,对于函数:

ISNULL(check_expression, replacement_value)

replacement_value 的类型必须可以隐式转换为 check_expression 的类型。请注意,'xy'+NULL 的类型为 VARCHAR(3)。因此,您的字符串 'ABCDEFGHIJ' 被转换为 VARCHAR(3) 并因此被修剪。

听起来很奇怪为什么它不是VARCHAR(2),但事实就是这样——比'xy'长一个字符。你可以玩这个 SQLFiddle 并亲自查看 'xy'+NULL 的类型与表达式 CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END 的类型相同,其中为 NULL,但隐式兼容 VARCHAR(3)

似乎对于表达式 'xy'+NULL 感知长度可以计算为 'xy' 字符串长度 (2) 加 1,对于每个 NULL 添加。例如,'xy'+NULL+NULL的类型为VARCHAR(4),类型为'xy'+NULL+NULL+NULLVARCHAR(5) 等等 - 看看这个 SQLFiddle 。这非常奇怪,但这就是 MS SQL Server 2008 和 2012 的工作原理。

关于sql-server - 为什么 T-SQL ISNULL() 会截断字符串而 COALESCE 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com