Saya bertanya-tanya apa perbedaan antara dua metode berikut:
GETUTCDATE()-2
dan
DATEADD(d,-2,GETUTCDATE())
Saya kira menggunakan DATEADD
adalah cara yang benar, tetapi bertanya-tanya mengapa?
sumber
Saya bertanya-tanya apa perbedaan antara dua metode berikut:
GETUTCDATE()-2
dan
DATEADD(d,-2,GETUTCDATE())
Saya kira menggunakan DATEADD
adalah cara yang benar, tetapi bertanya-tanya mengapa?
Tidak ada perbedaan nyata di sana, tetapi ketika Anda mulai menggunakan DATETIME2
nilai, atau fungsi yang mengembalikan DATETIME2
nilai, Anda akan mendapatkan kesalahan.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, Level 16, State 2, Line 17 Operan tipe clash: datetime2 tidak kompatibel dengan int
Untuk ini, Anda harus menggunakan fungsi matematika tanggal.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand berbicara tentang masalah ini secara singkat dalam seri Bad Habits to Kick .
Bertentangan dengan klaim dalam salah satu jawaban lain, kedua opsi secara resmi didukung dan didokumentasikan oleh SQL Server: datetime - number
ini bukan perilaku yang tidak terdefinisi.
Keuntungan besar
DATEADD(d, -2, GETUTCDATE())
adalah kenyataan bahwa itu adalah dokumentasi diri : Tujuannya segera jelas.
GETUTCDATE() - 2
, di sisi lain, bergantung pada pembaca yang mengetahui definisi datetime - number
operasi. Ya, saat ini mungkin T-SQL idiomatik, tetapi kenyataan bahwa ini tidak lagi didukung untuk datetime2
menyiratkan bahwa generasi masa depan pengembang SQL Server mungkin tidak lagi mengenalnya.
date
ditambahkan). Agak berantakan.