为什么此SQL顺序空值持续?

时间:2014-11-18 01:25:41

标签: sql

这显然会将myDate的空值放在结果集的底部。这是如何执行的原因是什么?

SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;

2 个答案:

答案 0 :(得分:5)

这是您的order by

ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END),
          myDate

订单的第一个表达式是“将NULL值赋值为1(对于排序),将非NULL值赋值为0”。好吧,您按升序排序,因此NULL值最后一次。

如果您想要它们,请使用desc

ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END) DESC,
          myDate

答案 1 :(得分:0)

ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;

myDate为null时,表达式将返回1.否则它将返回0. 1大于0,因此当按该表达式的结果按升序排序时(默认值),{{1}值被移到最后。