【问题标题】:How to custom MySQL ORDER BY [duplicate]如何自定义 MySQL ORDER BY [重复]
【发布时间】:2014-01-17 07:27:04
【问题描述】:

是否可以在 MySQL 中编写自定义 ORDER BY 语句

我的意思是,我有这样的数据库,

id  time  day

1   1:55  Mon
2   2:00  Sun
3   1:00  Mon
4   3:00  Tue
5   2:30  Sun

我可以这样写订单声明,

SELECT * FROM mytable ORDER BY day

但是是否可以编写查询以获取 Sun 作为第一和 Tue 第二和 Mon 第三

这是错误的,但像这样的查询:

SELECT * FROM mytable ORDER BY Sun, Tue, Mon

【问题讨论】:

标签: mysql sql sorting sql-order-by


【解决方案1】:

有可能

SELECT * FROM mytable ORDER BY FIELD(day, Sun, Tue, Mon)

【讨论】:

    【解决方案2】:

    假设dayVARCHAR,您可以编写一个冗长的CASE WHEN 语句:

    SELECT *
    FROM <table>
    ORDER BY CASE day
        WHEN 'Sun' THEN 1
        WHEN 'Mon' THEN 2
        WHEN 'Tue' THEN 3
        WHEN 'Wed' THEN 4
        WHEN 'Thu' THEN 5
        WHEN 'Fri' THEN 6
        WHEN 'Sat' THEN 7
        ELSE 0
    END
    

    【讨论】:

      【解决方案3】:

      来自 arilia 的评论是 mysql 的最佳方式。对于更便携的 sql 尝试

      order by day = 'sat', day = 'Fri'
      

      然后继续接下来的日子。这应该适用于所有数据库

      【讨论】:

        【解决方案4】:

        试试这个Check

        SELECT * FROM table ORDER BY FIELD(day, Sun, Tue, Mon,Tue,Wed,Thu,Fri,Sat)
        

        【讨论】:

          【解决方案5】:

          您可以像下面这样使用Mysql的自定义订单查询:

          SELECT * FROM mytable ORDER BY FIELD(day, 'Sun', 'Tue', 'Mon')
          

          更多信息可以查看文档:http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_field

          【讨论】:

            猜你喜欢
            • 2019-04-23
            • 2023-04-07
            • 1970-01-01
            • 1970-01-01
            • 2013-09-20
            • 2011-12-20
            • 2011-05-04
            • 2014-03-03
            • 2014-12-29
            相关资源
            最近更新 更多