Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server ORDER BY date et dernières valeurs nulles

smalldatetime a une portée jusqu'au 6 juin 2079, vous pouvez donc utiliser

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

Si aucun enregistrement légitime n'aura cette date.

Si ce n'est pas une hypothèse, vous avez envie de vous fier à une option plus robuste qui consiste à trier sur deux colonnes.

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

Cependant, les deux suggestions ci-dessus ne permettent pas d'utiliser un index pour éviter un tri et donnent des plans similaires.

Une autre possibilité si un tel index existe est

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