我正在尝试查找具有正常 AZ、az、0-9 范围之外的数据的字段。这些字段中有数据,例如:Café 或 Crème。
这不起作用:
select FieldData
from Field
WHERE FieldData not like '%[0-9A-Za-z]%'
group by FieldData
我正在尝试查找具有正常 AZ、az、0-9 范围之外的数据的字段。这些字段中有数据,例如:Café 或 Crème。
这不起作用:
select FieldData
from Field
WHERE FieldData not like '%[0-9A-Za-z]%'
group by FieldData
LIKE
具有范围通配符的运算符是排序规则敏感的。这里的关键声明是:
在范围搜索中,范围中包含的字符可能会根据排序规则的排序规则而有所不同。
基本上,当范围扩大时,范围内包含的字符可能不符合您的预期。如果您找到一个排序规则,其中所有字母 az/AZ 都在其重音对应项之前,那么事情应该可以工作。二进制排序排序规则应该这样做,其中:
根据区域设置和数据类型定义的编码值序列对数据进行排序。
使用Latin1_General_BIN2
(_BIN2
是 SQL Server 2005+,_BIN
应该也可以),以下成功:
select FieldData
from (select 'abcd' as FieldData union
select '1234' union
select 'Café' union
select 'Crème') as Field
WHERE FieldData COLLATE Latin1_General_BIN2 like '%[^0-9A-Za-z]%'
--output:
--Café
--Crème
not like
请注意,您必须将a反转并将like
模式更改为“非”范围 ( [^]
),因为您的原始查询仍将排除 Café 和 Crème,因为它们具有非重音字符。