如何按大于DATE(NOW())的Date列排序?

时间:2019-06-24 20:34:58

标签: mysql sql

我有date_end列,我需要对其进行排序,这仅是最重要的日期比今天大的行。

因此,将日期大于今天=“ 1”,将日期小于=“ 0”并进行排序。

因此具有以下数据表:

+----+------------+ 
| id | date_end   |  
+----+------------+ 
| 1  | 31-01-2018 |  
+----+------------+ 
| 2  | 01-05-2019 |  
+----+------------+ 
| 3  | 31-05-2018 |  
+----+------------+ 
| 4  | 31-07-2019 |  
+----+------------+ 
| 5  | 31-04-2020 |  
+----+------------+ 
| 6  | 31-08-2019 |  
+----+------------+ 

我需要虚拟添加“实际”列并对其进行排序:

+----+------------+--------+
| id | date_end   | actual |
+----+------------+--------+
| 1  | 31-01-2018 | 0      |
+----+------------+--------+
| 2  | 01-05-2019 | 0      |
+----+------------+--------+
| 3  | 31-05-2018 | 0      |
+----+------------+--------+
| 4  | 31-07-2019 | 1      |
+----+------------+--------+
| 5  | 31-04-2020 | 1      |
+----+------------+--------+
| 6  | 31-08-2019 | 1      |
+----+------------+--------+

类似: 在date_end> DATE(NOW())然后1 ELSE 2 END

时按情况排序

2 个答案:

答案 0 :(得分:2)

然后按照您的建议进行操作:

ORDER BY CASE WHEN date_end > curdate() THEN 1 ELSE 0 END

答案 1 :(得分:1)

在MySQL中,您可以利用布尔表达式可以直接使用的事实。所以:

order by (date_end > curdate()) desc

“真”>“假”,因此desc将真值放在第一位。