我需要比较两列,并在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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,因为我们都知道空字符串和空列值不同,我希望看到结果返回"通过",但事实并非如此.
从Martin's asnwer 这里,他解释说,这样的比较结果UNKNOWN,而不是TRUE或者FALSE,这澄清了我看到这些结果的原因,但我需要找到解决方案.我知道必须有一个简单的方法来解决这个问题...
我知道有一些内置功能,例如ISNULL()和NULLIF(),但我不知道这些是否可以帮助这种情况......
如果我们使用ISNULL()函数将空值设置为空字符串,则比较将不起作用,因为空字符串等于空字符串,例如
DECLARE @EmptyString VARCHAR(20) = '',
@Null VARCHAR(20) = Null;
SELECT
CASE WHEN ISNULL(@EmptyString, '') != ISNULL(@Null, '') THEN 'Pass' ELSE 'Fail' END AS EmptyStringVsNull
Run Code Online (Sandbox Code Playgroud)
这也会返回'FAIL',所以这是不行的.我总是可以使用ISNULL将其转换为不同的字符串,但这仍然不合适,因为空字符串可能具有不同的值,偶然可以匹配我们决定将空值转换为的值.
DECLARE @EmptyString VARCHAR(20) = '',
@Null VARCHAR(20) = Null;
SELECT
CASE WHEN NULLIF(@EmptyString, '') != NULLIF(@Null, '') THEN 'Pass' ELSE 'Fail' END AS EmptyStringVsNull
Run Code Online (Sandbox Code Playgroud)
如果我们使用该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
Run Code Online (Sandbox Code Playgroud)
它会返回pass,因为你使用的=不是!=
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |