我正在尝试查找数据超出正常A-Z,a-z,0-9范围的字段。 这些字段中包含数据:Café或Crème。
这不起作用:
select FieldData
from Field
WHERE FieldData not like '%[0-9A-Za-z]%'
group by FieldData
答案 0 :(得分:2)
带有范围通配符的LIKE
运算符为collation sensitive。这里的关键声明是:
在范围搜索中,范围中包含的字符可能会有所不同 取决于整理的排序规则。
基本上,范围中包含的字符可能与范围扩展时的预期不符。如果您找到一个排序规则,其中所有字母a-z / A-Z都在其重音对应物之前,则事情应该起作用。 binary sort collation归类应该这样做,其中:
根据语言环境定义的编码值序列对数据进行排序 和数据类型。
使用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
转换为like
并将模式更改为“非”范围([^]
),因为原始查询仍会将Café和Crème排除在外他们有非重音字符。