Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server ORDER BY data e valori nulli ultimi

smalldatetime ha un intervallo fino al 6 giugno 2079, quindi puoi utilizzare

ORDER BY ISNULL(Next_Contact_Date, '2079-06-05T23:59:00')

Se nessun record legittimo avrà tale data.

Se questo non è un presupposto che ti piace fare affidamento su un'opzione più robusta è l'ordinamento su due colonne.

ORDER BY CASE WHEN Next_Contact_Date IS NULL THEN 1 ELSE 0 END, Next_Contact_Date

Entrambi i suggerimenti di cui sopra non sono in grado di utilizzare un indice per evitare un ordinamento e fornire piani dall'aspetto simile.

Un'altra possibilità se esiste un tale indice è

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