我在 sql server 上有一个简单的 LIKE 查询,当前导字符与第一个字符相同时,该查询不会返回任何结果...
数据库故事包含一行,其中包含字段“Lastname”和值“Aalesund”
select *
from table
where LastName like 'A%' -- returns no results
如果我将“姓氏”字段更改为包含“奥勒松”,则完全相同的查询将返回正确的行。
有什么想法吗?
斯蒂格
最佳答案
在 Sql 服务器的丹麦语/挪威语排序规则中,“aa”被视为 å 的“同义词”,因为这就是 1940 年代之前丹麦这封信的书写方式。这也意味着排序时“aa”被视为字母表的最后一个字母。
我不知道这种行为在挪威上下文中是否有意义,但我认为排序规则在 Sql server 2012 中被分成两部分,也许这会解决它。
更新:根据维基百科,挪威将“Aa”用作“Å”与丹麦语的用法类似:“Aa”已被标准化语言的官方组织废除了数十年,但一些城镇拒绝这样做由于历史原因改名,“Aa”在姓氏中也仍然很常见。
基于此,我想说,在搜索 LIKE“A%”时找不到“Aalesund”是挪威本地化应用程序中最正确的行为。如果您不使用丹麦/挪威排序规则来更改此设置,您应该意识到它将更改其他属性,例如特殊字母的排序,如上所述。
许多名为Danish_Norwegian_...的不同排序规则不会对您有帮助。它们指定了对大小写、重音、字符宽度和假名类型敏感度的行为(我相信后者仅与日语相关)。 “Å”不被视为带重音的“A”,而是一个不同的字母。排序规则命名约定的描述位于this MSDN article中。 .
更新2:令人惊讶的是,排序规则Norwegian_100_CI_AI 似乎符合您的要求。也许丹麦和挪威的用法毕竟不同......
关于sql - sql server中的简单like查询没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9003764/