【问题标题】:mySQL sorts underscore lastmySQL 最后排序下划线
【发布时间】:2010-11-23 21:30:47
【问题描述】:

我的表中有一个存储字符串的列(它是一个文本列):

varchar(16) latin1_swedish_ci

问题是,当我说“ORDER BY name ASC”时,它会返回结尾以下划线开头的单词。这是它返回的一个示例:

-a
-mmddd2
-z
-z3
aaa
b
c
t
_a
___-

我敢打赌我可以使用 php 进行排序,但是有没有一种简单的方法可以让 mySQL 将下划线放在破折号之后?我这样做是为了匹配 javascript 排序函数的输出。

我想得到:

-a
-mmddd2
-z
-z3
_a
___-
aaa
b
c
t

【问题讨论】:

    标签: php javascript mysql sorting


    【解决方案1】:

    Collations 定义排序顺序,如果没有可用的排序规则使用您需要的排序顺序,您可以定义自己的排序顺序,如 here 所述。

    【讨论】:

    • 谢谢,@MikeFlynn。修复了链接。
    【解决方案2】:

    我并不是说这是一个优雅的解决方案,但您可以尝试这样做:

    select name
    from customers
    order by replace(name, '_', '-+') asc;
    

    只需将 + 替换为将前缀下划线值放在破折号之后的任何内容。

    【讨论】:

    • 请注意,使用计算的 ORDER BY 子句将破坏其字段索引的好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2023-04-04
    • 2015-10-24
    • 2015-11-19
    相关资源
    最近更新 更多