我有一个date字段,显示为从今天开始的天数。因此2055-01-011950-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

10-07 12:36