我有一个date
字段,显示为从今天开始的天数。因此2055-01-01
和1950-01-01
将分别显示为正数和负数。现在我想让这些按顺序排列,非负数先按升序排列,然后负数按降序排列。例如:
0
1
2
3
4
-1
-2
-3
最佳答案
以下也将起作用:
ORDER BY expiry < CURRENT_DATE, abs(expiry - CURRENT_DATE)
但是,此表单不会使用索引按所需顺序生成行。如果查询会从中受益(从表中选择大多数行或使用限制),则需要使用联合:
SELECT ... WHERE ... AND expiry >= CURRENT_DATE ORDER BY expiry
UNION ALL
SELECT ... WHERE ... AND expiry < CURRENT_DATE ORDER BY expiry DESC