SQL Server LIKE子句问题

时间:2015-10-09 09:34:56

标签: sql sql-server

这可能非常简单,我忽略了,但它让我疯狂。

基本要点是我在SQL Server 2014中有一个非常简单的表,叫做Products,它包含一些ProductNames列(nvarchar(max))。我输入了一些测试字符串,例如

Caly
Calyd
Cali
Cal
Taly
Blical
Blacaly

我在这张桌子上执行一个非常简单的SELECT:

SELECT *
FROM Products
WHERE ProductName LIKE '%Cal%'

这就是事情,我只是收回这些结果

Cali
Cal
Blical

注意缺少的Caly和Blacaly 。但如果我搜索'%Caly%',我会收回预期的结果:

Caly
Calyd
Blacaly

或者,如果我按预期搜索“%Ca%”:

Caly
Calyd
Cali
Cal
Blical
Blacaly

所以真的,给了什么,我在这里完全失去了。 'Cal'是某种奇怪的复活节彩蛋吗?侏儒吃我的结果,还是什么?

(顺便说一句,我在MySQL中尝试了同样的事情,就像测试一样,它在那里按预期工作。)

2 个答案:

答案 0 :(得分:6)

您正在使用Hungarian_CI_AS排序规则。 Hungarian alphabet有向字'ly'是一个单独的字母。

所以例如“Caly”是一个3个字母的单词 - “C”,“a”,“ly”。

答案 1 :(得分:1)

这是因为你的校对,如果你看一下匈牙利校对Ly是一个角色:

Hungarian Collation Chart

所以类似的行为会有所不同,如果你真的想以不同方式处理匈牙利整理列中的数据,就像在Latin1排序规则中一样,那么你必须在选择期间告诉SQL服务器:

SELECT *
FROM Products
WHERE ProductName COLLATE Latin1_General_CI_AS LIKE '%Cal%'