1

我正在尝试查找具有正常 AZ、az、0-9 范围之外的数据的字段。这些字段中有数据,例如:Café 或 Crème。

这不起作用:

select FieldData
from Field
WHERE FieldData not like '%[0-9A-Za-z]%'
group by FieldData
4

1 回答 1

2

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,因为它们具有非重音字符。

于 2013-05-24T19:52:33.473 回答