gpt4 book ai didi

sql - 将 NULL 添加到 varchar 时使用 ISNULL

转载 作者:行者123 更新时间:2023-12-02 23:22:03 25 4
gpt4 key购买 nike

在尝试 MSSQL 时,我遇到了一些我无法解释的行为。

我正在研究将 NULL 值添加到 varchar 时以及执行以下查询时会发生什么情况:

SELECT
ISNULL(NULL + ' ', 'test')

我得到结果“te”。同样,如果我将单词测试更改为任何其他单词,我只会得到前两个字母。如果我增加 + ' ' 中的空格数,我的结果中会得到额外的字母(因此 NULL + '[两个空格]' 给我'tes')。有什么想法吗?

如果我声明一个变量并将其设置为 NULL 例如

DECLARE @testnull AS varchar(32)

SET @testnull = NULL

SELECT
ISNULL(@testnull + ' ', 'test')

然后我得到结果“测试”(正如我所期望的)。

最佳答案

使用COALESCEISNULL 采用第一个 NON-NULL 数据类型,在这种情况下,因为尚未声明它,所以您会得到 VARCHAR(1)对于 NULL,然后当您添加空格时它会变成 VARCHAR(2)(计算时仍然是 NULL,但 SQL Server 会生成一个该步骤之前的假设)。在某些情况下,不带长度的 varchar 的默认值为 1,而在其他情况下,默认值为 30。我会让您猜猜这里使用的是哪一个。

SELECT
ISNULL(NULL + ' ', 'test'), COALESCE(NULL + ' ', 'test');

结果:

----  ----
te test

您可以通过以下方式明确地看到这一点:

SELECT
x = ISNULL(NULL + ' ', 'test')
INTO #a1;

SELECT
x = COALESCE(NULL + ' ', 'test')
INTO #a2;

SELECT LEFT(t.name, 3), TYPE_NAME(c.user_type_id), max_length
FROM tempdb.sys.columns AS c
INNER JOIN tempdb.sys.tables AS t
ON c.[object_id] = t.[object_id]
WHERE t.name LIKE '#a[1-2]%';

结果:

---  -------  ----
#a1 varchar 2
#a2 varchar 4

在几乎所有情况下,我更喜欢 COALESCE 而不是 ISNULL。我在本技巧中解释了原因(以及存在异常(exception)的地方):

关于sql - 将 NULL 添加到 varchar 时使用 ISNULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15387573/

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