我正在尝试编写一个查询来检查nvarchar字段中的单个字符是否超出有效范围。
我认为这样的查询可以工作,但结果包含两行,而不是只包含无效的一行:
select foo
from (
select N'ABDC' as foo
union all
select N'ABǼC' as foo
) as bar
where bar.foo like '%[^ -~]%' COLLATE SQL_Latin1_General_Cp1_CS_AS
有效范围是ascii空格和颚化符中的任何内容。
一个更简单的例子也失败了:
select foo
from (
select N'ABDC' as foo
union all
select N'ABzC' as foo
) as bar
where bar.foo like '%[^A-Z]%' COLLATE SQL_Latin1_General_Cp1_CS_AS
这将不返回任何结果,而返回正确的行:
select foo
from (
select N'ABDC' as foo
union all
select N'AB~C' as foo
) as bar
where bar.foo like '%[^A-Z]%' COLLATE SQL_Latin1_General_Cp1_CS_AS
下面是一个简单的例子:http://sqlfiddle.com/#!18/9eecb/93202号
我做错了什么?
1条答案
按热度按时间vcirk6k61#
基于这个答案,我可以使用like来完成这项工作:
看起来我只是需要一个不同的排序。
同样,这也适用: