您能否解释一下为什么以下查询返回不满足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]';
其他任何区分大小写的排序规则(即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
(大写字母和小写字母分开),这就是为什么它可以正确地工作的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句