这显然会将myDate的空值放在结果集的底部。这是如何执行的原因是什么?
SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
答案 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}值被移到最后。