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

Come si estrae solo la data da datetime in T-Sql?

Il modo migliore è:

   SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0) 

Questo perché internamente, SQL Server archivia tutte le date come due interi, di cui il primo è il ****numero di giorni*** dal 1 gennaio 1900. (il secondo è la parte temporale, memorizzata come numero di secondi da mezzanotte. (secondi per SmallDateTime s o millesecondi per DateTime s)
Utilizzare l'espressione sopra è meglio perché evita tutte le conversioni, leggendo e accedendo direttamente a quel primo intero in una rappresentazione interna di date senza dover eseguire alcuna elaborazione... i due zeri nell'espressione sopra (che rappresentano 1 gennaio 1900), sono anche utilizzati direttamente senza elaborazione o conversione, perché corrispondono alla rappresentazione interna del server SQL della data 1 gennaio 1900 esattamente come presentata (come numero intero)..

*NOTA. In realtà, il numero di limiti di date (mezzanotte) che devi attraversare per passare da una data all'altra.