mysql按日期排序和布尔优先级:数字到日期的怪异

yfwxisqw  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(187)

我有一个表,我想按创建日期按降序排序,但也有一个固定列,如果这是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转换为1月1日3000,因为如果我使用值2,那么固定的行就不在正确的位置。
我的问题是:3比2020-06-22 08:59:09大多少?有没有更好的方法来形成这个查询?
额外问题:是否有一种方法可以确保固定行也按创建日期\u相对于所有其他固定行降序排序?与前两个问题相比,这对于成为最佳答案并不那么重要。

pxiryf3j

pxiryf3j1#

基本上你是对的,但原因恰恰相反。这只是一个简单的字符串比较:

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

相关问题