gpt4 book ai didi

sql - 比较空字符串与 null 值 - SQL Server

转载 作者:行者123 更新时间:2023-12-03 02:08:01 28 4
gpt4 key购买 nike

我需要比较两列,并且在将 NULL 与空字符串进行比较时遇到问题。简而言之,这就是我正在寻找的内容。

DECLARE @EmptyString VARCHAR(20) = '', -- Could have valid VARCHAR data, empty string, or NULL
@Null VARCHAR(20) = Null; -- Could have valid VARCHAR data, empty string, or NULL

SELECT
CASE WHEN @EmptyString != @Null THEN 'Pass' ELSE 'Fail' END AS EmptyStringVsNull

在这种情况下,因为我们都知道空字符串和空列值是不同的,所以我希望看到结果返回为“通过”,但事实并非如此。

来自 Martin 的回答 here ,他解释说,像这样的比较结果是 UNKNOWN,而不是 TRUEFALSE,这澄清了我看到这些结果的原因,但我需要找到解决方案。我知道一定有一个简单的方法来解决这个问题,但我缺少......

我知道有一些内置函数,例如 ISNULL()NULLIF(),但我不知道这些函数在这种情况下是否有帮助...

ISNULL()

如果我们使用 ISNULL() 函数将 null 值设置为空字符串,则比较将不起作用,因为空字符串等于空字符串,例如

DECLARE @EmptyString VARCHAR(20) = '',
@Null VARCHAR(20) = Null;

SELECT
CASE WHEN ISNULL(@EmptyString, '') != ISNULL(@Null, '') THEN 'Pass' ELSE 'Fail' END AS EmptyStringVsNull

这也会返回“FAIL”,所以这是不行的。我总是可以使用 ISNULL 将其转换为不同的字符串,但这仍然不合适,因为空字符串可能具有不同的值,该值可能与我们决定将 null 值转换为的任何值相匹配.

NULLIF()

DECLARE @EmptyString VARCHAR(20) = '',
@Null VARCHAR(20) = Null;

SELECT
CASE WHEN NULLIF(@EmptyString, '') != NULLIF(@Null, '') THEN 'Pass' ELSE 'Fail' END AS EmptyStringVsNull

如果我们使用NULLIF()函数将空字符串转换为null,我们的比较仍然不会返回true。这是因为,正如链接文章中所解释的,比较空值会导致 UNKNOWN

通过上面的简单 SQL 示例,如何检查 NULL 值是否不等于空字符串?

最佳答案

您的第一个示例返回失败,因为您使用了错误的运算符。如果您想查看某个内容是否等于其他内容,请使用 =,而不是 !=

下面是证明 NULL 可以与 '' 进行比较的代码:

DECLARE @EmptyString VARCHAR(20) = '',
@Null VARCHAR(20) = Null;

SELECT
CASE WHEN ISNULL(@EmptyString, '') = ISNULL(@Null, '')
THEN 'Pass' ELSE 'Fail'
END AS EmptyStringVsNull

它返回 pass,因为您使用 =,而不是 !=

关于sql - 比较空字符串与 null 值 - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49966177/

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