【问题标题】:Does Microsoft SQL Server support localized name sorting?Microsoft SQL Server 是否支持本地化名称排序?
【发布时间】:2019-01-26 22:14:14
【问题描述】:

我想知道 Microsoft SQL Server 是否支持基于本地化偏好的排序。我看到他们在https://technet.microsoft.com/en-us/library/cc835499(v=sql.110).aspx 有一个页面,其中列出了如何根据语言规范比较字符串。但我注意到英语和荷兰语的比较都使用Latin1_General_CI_AS

问题是在荷兰,许多人的姓氏都带有tussenvoegsel。所以我相信De Jong的姓在升序排序时会排在Van Beethoven之后。

我的理解是 Microsoft SQL Server 不支持此用例,但我不能 100% 确定。想知道其他人是否有不同的经历。谢谢!

【问题讨论】:

  • 澄清一下,您希望它在升序排序时出现在之后?即使区分大小写I would expect the opposite
  • 在荷兰语中,姓氏前缀 (de, van, ...) 的排序优先级低于 Jong、Beethoven 等。Marc,您是在问 SQL 是否知道这些差异?我认为答案是否定的。 Sterker nog,我认为如果您的数据库具有来自混合背景的名称,这是不可能的。您如何对毕加索的全名“Pablo Diego José Francisco de Paula Juan Nepomuceno Maríade los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso”进行排序?
  • 我猜按排序偏好,人们会期望 De 和 Van 被完全忽略……这会更有意义,@user1443098 所阐述的观点很重要。它类似于规范化名称,尽管我可以在荷兰语中看到解析或将其分开可能很困难。
  • 您好,答案是肯定的,SQL Server 支持本地化排序。似乎您对 linguistic sorting 感到困惑,这是完全不同的事情,与 alphanumeric sorting 的语言不同。荷兰的语言是荷兰语,D 位于 V 之前,因此 alphanumeric sorting(简单的“order by”)将根据此。 SQL Server 根据 COLLATE 对alphanumeric 进行排序,荷兰语(荷兰)的合适 COLLATE 是 Latin1_General_CI_AS 或 Latin1_General_CS_AS。对于linguistic sorting,您可以使用FUll Text Search Technics。
  • @scsimon 是的,我希望“范贝多芬”排在“德容”之前,姓氏前缀的优先级较低。 user1443098 是的,这就是我要问的,是的,它似乎不受支持,我正在四处寻找可能在 SQL 之外实现此功能的库。 scsimon 是的,我希望 De 和 Van 被完全忽略。

标签: sql sql-server sorting localization locale


【解决方案1】:

没有办法告诉 SQL Server 文本的某些部分要与其他部分区别对待。

SQL Server 知道并理解基于字符的排序顺序(排序规则),例如é 应该按照 e 进行排序。但绝不应该基于单词和/或基于位置的,例如 Van,如果它后面跟着一些东西,则应该忽略它。

前缀可以有多个单词,例如“Van der”和“Van 't”也很常见,还有that is not all by far。因此,通过某种内置规则“正确”地进行操作将是一项非常复杂的工作。

您唯一的选择是将前缀(“Tussenvoegsel”)存储在单独的列中。

维基百科提到 using a separate 'Tussenvoegsel' column is commonly done in The Netherlands - 同时它提到这在比利时的荷兰语地区并不常见,因此您甚至需要了解您的受众。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多