具有字符范围和区分大小写列的 SQL Server LIKE 运算符

kei*_*chi 4 sql sql-server

你能解释一下为什么下面的查询返回不满足 LIKE 条件的行吗?表中的列具有区分大小写的排序规则,因此查询不应返回任何内容。

CREATE TABLE #temp (col CHAR COLLATE SQL_Latin1_General_CP1_CS_AS);
INSERT INTO #temp VALUES ('A'), ('B'), ('C'), ('D'), ('E');
SELECT * FROM #temp WHERE col LIKE '[b-d]';
Run Code Online (Sandbox Code Playgroud)

任何其他区分大小写的排序规则(即 Latin1_General_100_CS_AS、Polish_100_CS_AS、Modern_Spanish_100_CS_AS)也无法正常工作。

据我所知,只有二进制排序顺序集合(Latin1_General_100_BIN2、Modern_Spanish_100_BIN2)运行良好。

仅当我在 LIKE 条件下使用范围时才存在此错误。当我将 [bd] 更改为 [bcd] 时,一切正常。

这是数据库引擎中的错误吗?

我在 Windows NT 6.1(内部版本 7601:Service Pack 1)上使用 Microsoft SQL Server 2008 (SP3) - 10.0.5846.0 (X64) 企业版(64 位)

Mar*_*ith 5

不,这不是错误。

模式语法中的范围不是正则表达式。它定义了整理排序顺序下的范围。

这些排序规则排序AaBbCcDd...YyZz(大写和小写混合),所以这是一个预期的结果。

二进制排序规则排序AB .... YZ .... ab ... yz (大写和小写分开),这就是为什么它可以正常工作的原因。