这可能非常简单,我忽略了,但它让我疯狂。
基本要点是我在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中尝试了同样的事情,就像测试一样,它在那里按预期工作。)
答案 0 :(得分:6)
您正在使用Hungarian_CI_AS排序规则。 Hungarian alphabet有向字'ly'是一个单独的字母。
所以例如“Caly”是一个3个字母的单词 - “C”,“a”,“ly”。
答案 1 :(得分:1)
这是因为你的校对,如果你看一下匈牙利校对Ly是一个角色:
所以类似的行为会有所不同,如果你真的想以不同方式处理匈牙利整理列中的数据,就像在Latin1排序规则中一样,那么你必须在选择期间告诉SQL服务器:
SELECT *
FROM Products
WHERE ProductName COLLATE Latin1_General_CI_AS LIKE '%Cal%'