如何自定义MySQL ORDER BY

时间:2013-12-30 11:57:26

标签: mysql sql sorting sql-order-by

是否可以在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 作为第二个,周一作为第三个

这是错误的,但是喜欢这个查询:

SELECT * FROM mytable ORDER BY Sun, Tue, Mon

5 个答案:

答案 0 :(得分:2)

可能

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

答案 1 :(得分:1)

假设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

答案 2 :(得分:0)

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

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

继续其余的日子。这适用于所有数据库

答案 3 :(得分:0)

试试这个Check

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

答案 4 :(得分:0)

您可以使用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