gpt4 book ai didi

检查空字符串的 SQL 语句 - T-SQL

转载 作者:行者123 更新时间:2023-12-03 02:27:47 26 4
gpt4 key购买 nike

我正在尝试为某个字符串变量不为 null 或空的位置编写一个 WHERE 子句。我遇到的问题是某些非空字符串等于 N'' 文字。例如:

declare @str nvarchar(max) = N'㴆';
select case when @str = N'' then 1 else 0 end;

产量 1. 据我所知 Wikipedia ,这个特定的 unicode 字符是一个用于淹没某些东西的象形文字,它在语义上不等于空字符串。另外,字符串长度为 1,至少在 T-SQL 中是这样。

是否有更好(准确)的方法来检查 T-SQL 变量中的空字符串?

最佳答案

我找到了一个博客,https://bbzippo.wordpress.com/2013/09/10/sql-server-collations-and-string-comparison-issues/

这解释了

The problem is because the “default” collation setting (SQL_Latin1_General_CP1_CI_AS) for SQL Server cannot properly compare Unicode strings that contain so called Supplementary Characters (4-byte characters).

修复方法是使用补充字符不存在问题的排序规则。例如:

select case when N'㴆' COLLATE Latin1_General_100_CI_AS_KS_WS = N'' then 1 else 0 end;

将返回 0。有关更多示例,请参阅博客。

由于您要与空字符串进行比较,另一个解决方案是测试字符串长度。

declare @str1 nvarchar(max) =N'㴆';
select case when len(@str1) = 0 then 1 else 0 end;

这将按预期返回 0。

当字符串为空时,这也会产生 0。

编辑:

感谢 devio 的评论,我进行了更深入的挖掘,发现了来自 Erland Sommarskog https://groups.google.com/forum/#!topic/microsoft.public.sqlserver.server/X8UhQaP9KF0 的评论

除了不支持补充字符之外,Latin1_General_CP1_CI_AS 排序规则无法正确处理新的 Unicode 字符。所以我猜测 㴆 字符是一个新的 Unicode 字符。

指定排序规则 Latin1_General_100_CI_AS 也可以解决此问题。

关于检查空字符串的 SQL 语句 - T-SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42331678/

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