“ORDER BY'column_name'DESC”,但字母前的数字需要两个语句?

时间:2016-05-08 16:51:55

标签: mysql sql sorting sql-order-by

我想在我的数据库中选择数据并按字母顺序排序,但先编号,然后编号。

我的桌子样本:

CASCADE

我想使用第四列(带有日期的列和文本'未知'(称为'watch_date'))来订购它。

此列中的数据是文字 watch_date 474 1442437 2181257 2015-12-20 Modern Family 3 13 Little Bo Bleep 475 1442437 2189485 2015-12-21 Modern Family 3 14 Me? Jealous? 476 1442437 2209159 2015-12-22 Modern Family 3 15 Aunt Mommy 477 1442437 2237415 2015-12-22 Modern Family 3 16 Virgin Territory 478 1442437 2244103 2015-12-22 Modern Family 3 17 Leap Day 479 1442437 2239817 2015-12-24 Modern Family 3 18 Send Out the Clowns 480 1442437 2305713 2015-12-24 Modern Family 3 19 Election Day 481 1442437 2305715 2016-01-02 Modern Family 3 20 The Last Walt 482 1442437 2247703 2016-01-03 Modern Family 3 21 Planes, Trains and Cars 483 1553656 2656658 unknown Under the Dome 1 1 Pilot 484 1553656 2779640 unknown Under the Dome 1 2 The Fire 485 1553656 2821206 unknown Under the Dome 1 3 Manhunt 或格式为unknown的日期

为此,我使用以下查询:

YYYY-MM-DD

我认为SELECT * FROM `watched_episodes` ORDER BY `watch_date` + 0 DESC, `watch_date` DESC 部分为所有结果添加了0,但是当我不添加第二个ORDER BY语句时:

+ 0

它确实将数字(日期)放在字母之前,但似乎根本没有对日期进行排序。

2 个答案:

答案 0 :(得分:1)

嗯,你的查询完全错了。由于使用单引号,它应该给出错误。我假设你打算:

SELECT *
FROM watched_episodes
ORDER BY watch_date + 0 DESC, watch_date DESC;

这似乎是一种奇怪的方法。如果值始终为'Unknown'YYYY-MM-DD格式的字符串,我会选择:

ORDER BY (watch_date = 'unknown'),  -- USE `DESC` to put `unknown` first
         watch_date DESC

答案 1 :(得分:1)

使用" union"

SELECT * FROM (
SELECT * FROM `watched_episodes` WHERE `watch_date` != 'unknown'
ORDER BY `watch_date` DESC
) table_alias
UNION SELECT * FROM `watched_episodes` WHERE `watch_date` = 'unknown';

您可以在子查询中以任何您想要的顺序进行排序,并且仍然可以使用" unknown"实际日期之后的行

提示使用"日期"作为日期格式的列类型 - 因此您可以使用日期函数而不进行转换,只需让未知为null。