1. ホーム
  2. sql-server

[解決済み] SQL Server ORDER BY date and nulls last (日付とヌルの組み合わせ)

2023-03-16 08:58:31

質問

日付順に並べようとしています。私は最も新しい日付が最初に来るようにしたい。それは十分に簡単ですが、NULLである多くのレコードがあり、それらは日付を持っているレコードの前に来る。

私はいくつかのことを試しましたが、成功しませんでした。

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')

正規のレコードがない場合は、その日付になります。

これが前提でない場合、より堅牢なオプションとして、2つの列でソートすることができます。

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

<イグ