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

"ORDER BY 'column_name' DESC", but numbers before letters requires two statements?

我想 select 我的数据库中的数据并按字母顺序排列,但数字在前,然后是字母。

我的样本 table:

                    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'(称为 'watch_date'))

此列中的数据是文本 unknown 或格式为 YYYY-MM-DD

的日期

为此,我使用以下查询:

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

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

`watch_date` DESC

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

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

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

使用"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" 行

提示 使用 "date" 作为日期格式的列类型 - 这样您就可以使用日期函数而无需转换,只需让未知数为空即可。