sql - SQL Server 外来字符等于空字符串
问题描述
我们有一个查询在列中查找空值,但它返回的结果列不为空。
例如,此查询返回 true:
IF N'ការវិនិយោគបរទេស នៅជប៉ុន ធ្លាក់ចុះនៅឆ្នាំ២០១៧ នៅតែជាបញ្ហាធំបំផុត របស់ពិភពលោក' = N''
PRINT 'true'
ELSE
PRINT 'false';
我怀疑这可能是排序规则问题,但我尝试强制进行各种排序规则,结果仍然正确。
IF N'ការវិនិយោគបរទេស នៅជប៉ុន ធ្លាក់ចុះនៅឆ្នាំ២០១៧ នៅតែជាបញ្ហាធំបំផុត របស់ពិភពលោក' = N'' COLLATE Arabic_CI_AI
PRINT 'true'
ELSE
PRINT 'false';
解决方案
您要比较的文本似乎是高棉语,而不是阿拉伯语,因此您应该使用Khmer_100_*
排序规则。
看看这个 TSQL 片段
declare @coll table (
name nvarchar(50),
khmerSupported bit
)
declare @text nvarchar(200) = N'ការវិនិយោគបរទេស នៅជប៉ុន ធ្លាក់ចុះនៅឆ្នាំ២០១៧ នៅតែជាបញ្ហាធំបំផុត របស់ពិភពលោក'
declare @name nvarchar(50), @sql nvarchar(500)
declare c cursor for
select name from sys.fn_helpcollations()
where name like 'khm%'
open c
fetch c into @name
while @@fetch_status = 0 begin
set @sql = 'select ''' + @name + ''', case when @text = N'''' COLLATE ' + @name + ' then 0 else 1 end'
print @sql
insert into @coll (name, khmerSupported)
exec sp_executesql @sql, N'@text NVARCHAR(200)', @text=@text
fetch c into @name
end
close c
deallocate c
select Name, KhmerSupported from @coll
并尝试排序规则查询。
用于select Name, KhmerSupported from @coll where KhmerSupported=1
查找支持高棉比较的所有排序规则。
推荐阅读
- javascript - 箭头函数无法从对象中获取键和值
- javascript - 为什么最后一个事件代码不是 if 语句触发?
- python - TypeError:__init__() 在 Django 中为自定义用户获取了一个意外的关键字参数“实例”
- react-native - 使用 Redux Toolkit 从存储中删除中间件
- php - Laravel - 背包选择依赖于另一个选择
- android - 从 Google Fit Sensor API 收集实时心率数据
- java - 比较递归斐波那契与递归阶乘
- excel - 选择形状
- swift - 与 viewcontroller 一起使用时的 swiftUI 导航栏标题设置
- laravel - 如何获取laravel中列不为空或为空的记录?