【发布时间】:2020-11-20 09:08:08
【问题描述】:
我正在尝试编写一个查询来检查 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
我做错了什么?
【问题讨论】:
标签: sql sql-server