Sebenarnya, metode a
adalah sumber daya yang paling tidak intensif:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Terbukti lebih sedikit CPU intensif untuk durasi total yang sama satu juta baris oleh seseorang dengan terlalu banyak waktu di tangan mereka:Cara paling efisien di SQL Server untuk mendapatkan tanggal dari tanggal+waktu?
Saya melihat tes serupa di tempat lain dengan hasil serupa juga.
Saya lebih suka DATEADD/DATEDIFF karena:
- varchar tunduk pada masalah bahasa/format tanggal
Contoh:Mengapa ekspresi CASE saya non-deterministik? - float bergantung pada penyimpanan internal
- meluas untuk berolahraga hari pertama bulan, besok, dll dengan mengubah basis "0"
Edit, Okt 2011
Untuk SQL Server 2008+, Anda dapat CAST ke date
yaitu CAST(getdate() AS date)
. Atau cukup gunakan date
tipe data jadi tidak ada time
untuk dihapus.
Edit, Jan 2012
Contoh yang berhasil tentang betapa fleksibelnya ini:Perlu menghitung berdasarkan waktu atau angka tanggal di sql server
Sunting, Mei 2012
Jangan gunakan ini dalam klausa WHERE dan sejenisnya tanpa berpikir:menambahkan fungsi atau CAST ke kolom membatalkan penggunaan indeks. Lihat nomor 2 di sini Kesalahan Umum Pemrograman SQL
Sekarang, ini memang memiliki contoh versi pengoptimal SQL Server yang mengelola CAST hingga saat ini dengan benar, tetapi umumnya itu akan menjadi ide yang buruk ...
Edit, Sep 2018, untuk 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)