【问题标题】:Why does this SQL order null values last?为什么这个 SQL 对 null 值进行排序?
【发布时间】: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


    【解决方案1】:

    这是你的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
    

    【讨论】:

      【解决方案2】:
      ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
      

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

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 2018-12-10
        • 2021-09-29
        • 1970-01-01
        相关资源
        最近更新 更多