【发布时间】:2014-11-18 01:25:41
【问题描述】:
这显然会将 myDate 的 null 值放在结果集的底部。这是如何执行的背后的逻辑是什么?
SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
【问题讨论】:
标签: sql
这显然会将 myDate 的 null 值放在结果集的底部。这是如何执行的背后的逻辑是什么?
SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
【问题讨论】:
标签: sql
这是你的order by:
ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END),
myDate
order by 的第一个表达式是“给NULL 值一个值(用于排序)和非NULL 值一个值0”。好吧,您是按升序排序的,所以 NULL 值排在最后。
如果您首先需要它们,请使用desc:
ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END) DESC,
myDate
【讨论】:
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
当myDate 为空时,表达式将返回 1。否则,它将返回 0。1 大于 0,因此当按该表达式的结果以升序(默认)排序时,null 的值将被移动到最后。
【讨论】: