Přesněji řečeno, metoda a
je nejméně náročná na zdroje:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Prokazatelně méně náročné na CPU za stejnou celkovou dobu trvání milion řádků někým, kdo má v rukou příliš mnoho času:Nejúčinnější způsob na SQL Serveru, jak získat datum z data a času?
Viděl jsem podobný test jinde s podobnými výsledky.
Dávám přednost DATEADD/DATEDIFF, protože:
- varchar podléhá problémům s jazykem/formátem data
Příklad:Proč je můj výraz CASE nedeterministický? - Float se spoléhá na interní úložiště
- Rozšiřuje se na cvičení první den v měsíci, zítra atd. změnou základu „0“
Upravit, říjen 2011
Pro SQL Server 2008+ můžete CAST do date
tj. CAST(getdate() AS date)
. Nebo stačí použít date
datový typ, takže žádný time
odstranit.
Upravit, leden 2012
Zpracovaný příklad toho, jak flexibilní to je:Potřeba počítat podle zaokrouhleného času nebo data na serveru SQL
Upravit, květen 2012
Toto nepoužívejte v klauzulích WHERE a podobně bez přemýšlení:přidání funkce nebo CAST do sloupce znehodnotí použití indexu. Viz číslo 2 zde Běžné chyby programování SQL
Nyní zde máme příklad pozdějších verzí optimalizátoru SQL Server spravujících CAST k dnešnímu dni správně, ale obecně bude to špatný nápad ...
Upravit, září 2018, pro datum a čas2
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)