Strikt genomen, methode a
is het minst arbeidsintensief:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Bewezen minder CPU-intensief voor dezelfde totale duur van een miljoen rijen door iemand met veel te veel tijd:de meest efficiënte manier in SQL Server om een datum van datum+tijd te krijgen?
Ik zag elders een vergelijkbare test met vergelijkbare resultaten.
Ik geef de voorkeur aan de DATEADD/DATEDIFF omdat:
- varchar is onderhevig aan problemen met taal/datumformat
Voorbeeld:waarom is mijn CASE-expressie niet-deterministisch? - float vertrouwt op interne opslag
- het breidt zich uit om de eerste dag van de maand, morgen, enz. uit te werken door de basis van "0" te wijzigen
Bewerken, okt 2011
Voor SQL Server 2008+ kunt u CAST naar date
d.w.z. CAST(getdate() AS date)
. Of gebruik gewoon date
datatype dus geen time
te verwijderen.
Bewerken, jan 2012
Een uitgewerkt voorbeeld van hoe flexibel dit is:Noodzaak om te berekenen op afgeronde tijd of datum in sql-server
Bewerken, mei 2012
Gebruik dit niet in WHERE-clausules en dergelijke zonder na te denken:het toevoegen van een functie of CAST aan een kolom maakt het indexgebruik ongeldig. Zie hier nummer 2 Veelvoorkomende fouten bij het programmeren van SQL
Dit heeft een voorbeeld van latere SQL Server-optimizerversies die CAST tot op heden correct beheren, maar in het algemeen het zal een slecht idee zijn ...
Bewerken, sep 2018, voor 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)