对于LIKE
次查询, Latin1_General_CS_AS 排序规则不区分大小写。根据{{3}},这被列为" By Design"。
但是, Latin1_General_Bin 排序规则也区分大小写,并且与LIKE
查询完全一样。
您可以在这个简单的查询中看到差异:
SELECT
MyColumn AS Latin1_General_Bin
FROM MyTable
WHERE MyColumn LIKE '%[a-z]%' COLLATE Latin1_General_Bin;
SELECT
MyColumn AS Latin1_General_CS_AS
FROM MyTable
WHERE MyColumn LIKE '%[a-z]%' COLLATE Latin1_General_CS_AS;
我的问题是:
LIKE
?我将对 Latin1_General_CS_AS 标准化任何区分大小写的数据库,但这似乎是一个等待发生的微妙查询错误。
答案 0 :(得分:12)
这不是正则表达式。范围[a-z]
仅表示>='a' AND <='z'
。
在该排序规则下,其中包含除首都Z
以外的所有字母。
在SQL_Latin1_General_CP1_CS_AS
下,除资本A
之外的所有内容都属于该排序顺序。
如果仍然不清楚,请查看以下排序顺序;对于三种不同的排序规则
SELECT *
FROM (VALUES ('A'),('B'),('Y'),('Z'), ('a'),('b'),('y'),('z')) V(C)
ORDER BY C COLLATE Latin1_General_Bin
您会看到二进制排序规则将所有大写字母组合在一起,而另外两个则没有。
+--------------------+----------------------+-------------------------------+
| Latin1_General_Bin | Latin1_General_CS_AS | SQL_Latin1_General_CP1_CS_AS |
+--------------------+----------------------+-------------------------------+
| A | a | A |
| B | A | a |
| Y | b | B |
| Z | B | b |
| a | y | Y |
| b | Y | y |
| y | z | Z |
| z | Z | z |
+--------------------+----------------------+-------------------------------+
在范围搜索中,范围中包含的字符可能会有所不同 取决于整理的排序规则。