【问题标题】:ORDER BY alphabet first then follow by number首先按字母排序,然后按数字排序
【发布时间】:2013-06-29 09:15:04
【问题描述】:

我在 mysql 排序中寻找一些调整,我通常从表中选择记录,然后按 Name(varchar) ASC 排序记录但数字总是排在第一位

这里是我的问题的一些例子(注意。mysql 先用 0-9 对记录进行排序

SELECT name FROM list ORDER BY name ASC
record returned:
1 star
2 star
9 slice
Ape
Age
Beg
Bell
Fish
Zoo

我想要的是字母顺序在前,然后是数字

期望的输出

Ape
Age
Beg
Bell
Fish
Zoo
1 star
2 star
9 slice

【问题讨论】:

  • 我尽量让问题简单明了,如果我应该提供更多信息,请告诉我,干杯!

标签: mysql sql sorting sql-order-by


【解决方案1】:

使用以下ORDER BY 子句:

ORDER BY IF(name RLIKE '^[a-z]', 1, 2), name

【讨论】:

  • RLIKE 或 LIKE ? 没有得到
  • @GrijeshChauhan R 代表正则表达式
  • 哇!!它节省了我很多时间。非常感谢:)
  • 如何降序排列?例如。 9,2,1,动物园,鱼,贝尔?
  • 添加DESC:ORDER BY IF(name RLIKE '[a-z]'), 1, 2) DESC, name DESC
【解决方案2】:

参考this

SELECT name FROM list ORDER BY name * 1 ASC

编辑

SELECT name FROM list ORDER BY name * 1, name ASC

【讨论】:

  • 忽略所有字母。
  • @barmar:- 是的,同意你的看法
  • 这对我有用。出于某种原因,Barmar 的回答没有
【解决方案3】:

你可以试试这样的:

SELECT 
    name 
FROM 
    list 
ORDER BY 
    IF(name REGEXP '^[0-9]', CONCAT('zz',name),name) ASC

因此,如果您的名字以数字开头,则在开头连接“zz”(这样它将是最后一个)

【讨论】:

  • 不会让数字在vw 之间移动吗?
  • @Barmar 你的权利......我的意思是放字母表的最后一个字母,但即使这样它也不能解决所有情况,比如当你有一个名字时:'zzabc'
  • 这就是为什么我的解决方案是最好的。
  • 也不错,但我正在处理一个大字典表,所以我会坚持使用@Barmar 解决方案,无论如何谢谢!
  • 是的,我们都同意@Barmar 提供了最好/最干净的解决方案
【解决方案4】:

这就是我在 Rails 中使用 POSTGRESQL DB 的方法

.order(Arel.sql("SUBSTRING(LOWER(name), '^[A-Za-z].*'), SUBSTRING(LOWER(name), '^[0-9]+')::FLOAT"))  

                       

【讨论】:

    【解决方案5】:

    试试这个..

    很容易得到你的答案

    SELECT name  from list ORDER BY (name +0) ASC ,name ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2020-09-03
      • 1970-01-01
      • 2021-12-28
      • 2014-01-18
      • 2021-09-13
      相关资源
      最近更新 更多