你能解释一下为什么下面的查询返回不满足 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 位)
不,这不是错误。
模式语法中的范围不是正则表达式。它定义了整理排序顺序下的范围。
这些排序规则排序AaBbCcDd...YyZz(大写和小写混合),所以这是一个预期的结果。
二进制排序规则排序AB .... YZ .... ab ... yz (大写和小写分开),这就是为什么它可以正常工作的原因。