我正在尝试按日期订购。我希望最近的日期排在最前面。这很简单,但是有许多记录为空,并且这些记录位于任何具有日期的记录之前。
我尝试了一些方法但没有成功:
ORDER BY ISNULL(Next_Contact_Date, 0)
ORDER BY ISNULL(Next_Contact_Date, 999999999)
ORDER BY coalesce(Next_Contact_Date, 99/99/9999)
如何按日期排序并使空值排在最后?数据类型是smalldatetime
.
smalldatetime
范围截至 2079 年 6 月 6 日,因此您可以使用
ORDER BY ISNULL(Next_Contact_Date, '2079-06-05T23:59:00')
如果没有合法记录,就会有该日期。
如果这不是您喜欢的假设,那么更强大的选项是对两列进行排序。
ORDER BY CASE WHEN Next_Contact_Date IS NULL THEN 1 ELSE 0 END, Next_Contact_Date
上述两个建议都无法使用索引来避免排序,但给出了相似的外观计划。
如果存在这样的索引,另一种可能性是
SELECT 1 AS Grp, Next_Contact_Date
FROM T
WHERE Next_Contact_Date IS NOT NULL
UNION ALL
SELECT 2 AS Grp, Next_Contact_Date
FROM T
WHERE Next_Contact_Date IS NULL
ORDER BY Grp, Next_Contact_Date
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)