在我的查询中,我想按此命令:
DATEDIFF(CURDATE(), DATE_ADD(date, INTERVAL cycle MONTH))
上面的语句返回负值和正值。更确切地说,对于将来的日期为负,对于过去的日期为正,对于当前日期为零。我用它来计算服务的到期日期。您可以在下面找到输出的注释示例:
-1 (expires tomorrow)
-10 (expires in 10 days)
-20 (expires in 20 days)
0 (expires today)
+1 (expired yesterday)
+10 (expired 10 days ago)
+20 (expired 20 days ago)
问题是我想以与您在上面看到的相同的方式对结果进行ORDER BY。我正在尝试CAST()和ABS(),但没有成功。我认为这是由于没有标准功能可以得到我想要的东西。说我很确定我可以使用ORDER BY CASE解决这个问题,如下所示。
在询问它是伪代码之前。我不打算在查询中使用它:
ORDER BY CASE WHEN X <= 0
THEN
ODER BY CASE WHEN X > 0
太糟糕了,我在尝试使用的所有方法中都收到大量语法错误:-)它是如何工作的?
http://sqlfiddle.com/#!9/5a0dd/6
SELECT id, DATEDIFF(CURDATE(), DATE_ADD(`date`, INTERVAL cycle MONTH)) idx
FROM test
ORDER BY IF(idx<0,-idx/1000,IF(idx=0,0.1, idx)) ASC
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句