Rigorosamente, metodo a
è il meno dispendioso in termini di risorse:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Dimostrato meno dispendioso in termini di CPU per la stessa durata totale di un milione di righe da parte di qualcuno con troppo tempo a disposizione:il modo più efficiente in SQL Server per ottenere una data da data e ora?
Ho visto un test simile anche altrove con risultati simili.
Preferisco il DATAADD/DATEDIFF perché:
- varchar è soggetto a problemi di lingua/formato data
Esempio:perché la mia espressione CASE non è deterministica? - float si basa sulla memoria interna
- si estende per allenarsi il primo giorno del mese, domani, ecc. cambiando la base "0"
Modifica, ottobre 2011
Per SQL Server 2008+, puoi trasmettere in date
cioè CAST(getdate() AS date)
. Oppure usa semplicemente date
tipo di dati quindi nessun time
rimuovere.
Modifica, gennaio 2012
Un esempio funzionante di quanto sia flessibile:è necessario calcolare in base all'ora o alla data arrotondata nel server sql
Modifica, maggio 2012
Non usarlo nelle clausole WHERE e simili senza pensare:l'aggiunta di una funzione o CAST a una colonna invalida l'utilizzo dell'indice. Vedere il numero 2 qui Errori comuni di programmazione SQL
Ora, questo ha un esempio di versioni successive dell'ottimizzatore di SQL Server che gestiscono CAST fino ad oggi correttamente, ma generalmente sarà una pessima idea...
Modifica, settembre 2018, per datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)