gpt4 book ai didi

sql - 为什么IsNull(LTrim(RTrim(Lower(null))),-1)是*?

转载 作者:行者123 更新时间:2023-12-04 03:29:30 27 4
gpt4 key购买 nike

今天我在工作场所测试了一些东西

情况1:

Declare @a nvarchar(20)
Set @a = null
Select IsNull(LTrim(RTrim(Lower(@a))), -1)

情况2:
Select IsNull(LTrim(RTrim(Lower(null))), -1)

情况1的结果为 -1,但情况2的 * 在两种情况下,我都期待相同的结果。任何原因?

最佳答案

如果不声明数据类型,则在这种情况下将null声明为varchar(1)。您可以通过将结果选择到#temp表中来观察此情况:

Select IsNull(LTrim(RTrim(Lower(null))), -1) as x INTO #x;
EXEC tempdb..sp_help '#x';

在结果中,您将看到:
Column_name   Type      Length
----------- ------- ------
x varchar 1

由于-1不适合varchar(1),因此您将获得*作为输出。这类似于:
SELECT CONVERT(VARCHAR(1), -1);

如果要折叠为字符串,则建议将整数括在单引号中,这样就不会由于不希望的整数<->字符串转换而引起混淆:
SELECT CONVERT(VARCHAR(1), '-1'); -- yields "-"
SELECT CONVERT(VARCHAR(30), '-1'); -- yields "-1"

我不会对SQL Server将如何处理显式提供为 null的“值”做出任何假设,尤其是当复杂表达式难以预测哪个评估规则可能胜过数据类型优先级时。

关于sql - 为什么IsNull(LTrim(RTrim(Lower(null))),-1)是*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889696/

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