【问题标题】:Order By using Polish letters使用波兰字母订购
【发布时间】:2013-12-16 10:33:33
【问题描述】:

我对订购方式有疑问。例如,我有三个波兰语单词:“Zzzz”、“Żubr”和“Zajawka”。

它们应该是这样的:

Zajawka
Zzzz
Żubr

因为 Ż 字母在波兰字母中的 Z 之后。但这对我来说是:

Zajawka
Żubr
Zzzz

因此它将字母 Ż 视为 Z 字母...

【问题讨论】:

    标签: mysql sql sorting sql-order-by


    【解决方案1】:

    我假设数据库不是使用波兰排序规则创建的。但是你总是可以在排序时指定它:

    SELECT   name
    FROM     mytable
    ORDER BY name COLLATE SQL_Polish_Cp1250_CS_AS_KI_WI
    

    编辑:
    我误读了标签,并认为这是 SQL Server。如果您有不同的 RDBMS,请在 cmets 中回答 @RaphaëlAlthaus 的问题。

    【讨论】:

    • 我在使用 Mysql 和 Heidi SQL
    • 同样的语法适用,尽管 MySQL 似乎不支持波兰排序规则。看看this list - 也许东欧的一个会适用,但我承认我没有检查过。
    • 有一个utf8_polish_ci 字符集,但我在“是否对波兰字符进行排序”上找到了不同的答案...
    【解决方案2】:

    从数据库中获取记录后,您将不得不重新排序,因为它将 Ż 视为英文字符 z。

    您需要编写自定义重新排序方法,您只需在 z 之后排序 Ż。

    您可以获取除 Ż 之外的所有记录。

    然后在另一个查询中获取仅 Ż 的所有记录并将此列表附加到预取列表的末尾。

    选择名称中没有 Ż 字符的所有记录 Select * from clients Where client.name != Ż AND (my filter)

    Select * from clients Where client.name == Ż AND(我的过滤器)

    代码隐藏(c#):

    SqlDataReader dr = cmd.ExecuteReader();
    
               List<Product> myList = new List<Product>();
    
            while (dr.Read())
            {
                myList.Add(GetFromReader(dr));
            }
    
            if (dr.NextResult())
            {
                while (dr.Read())
                {
                    myList.AddRange(GetFromReader(dr));
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 2017-05-12
      • 2019-04-02
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2017-10-03
      相关资源
      最近更新 更多