MySQL 按日期排序和布尔优先级:数字到日期的怪异
Posted
技术标签:
【中文标题】MySQL 按日期排序和布尔优先级:数字到日期的怪异【英文标题】:MySQL Order By Date And Boolean Priority: Number To Date Weirdness 【发布时间】:2020-06-22 15:56:03 【问题描述】:我有一个表,我想按 date_created 降序排序,但还有一个固定列,如果它是 1,则无论日期如何,该行都应该位于顶部。我提出的确实有效的查询如下:
SELECT * FROM my_table
WHERE id = SOMEID
ORDER BY (CASE WHEN pinned = 1 THEN 3 ELSE date_created END) DESC;
我想知道为什么 mysql 认为数字 3 大于 2020 年的所有这些日期。我目前的理论是 mysql 将 3 转换为 3000 年 1 月 1 日的日期,因为如果我使用值 2那么固定的行不在正确的位置。
然后我的问题是:3 比 2020-06-22 08:59:09 大多少,有没有更好的方法来形成这个查询?
额外的问题:有没有一种方法可以确保固定的行也按 date_created 相对于所有其他固定行的降序排序?这对于成为最佳答案而言不如前两个问题重要。
【问题讨论】:
【参考方案1】:基本上你是对的,但原因恰恰相反。这只是一个简单的字符串比较:
SELECT '2020-01-01' > '3';
+--------------------+
| '2020-01-01' > '3' |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.01 sec)
SELECT '2020-01-01' < '3';
+--------------------+
| '2020-01-01' < '3' |
+--------------------+
| 1 |
+--------------------+
1 row in set (0.00 sec)
作为替代方案,请考虑ORDER BY pinned = 1 DESC, date
【讨论】:
谢谢,这是一个干净的解决方案,你的解释很有道理。以上是关于MySQL 按日期排序和布尔优先级:数字到日期的怪异的主要内容,如果未能解决你的问题,请参考以下文章