Meskipun saya membatalkan jawaban yang ditandai sebagai benar. Saya ingin menyentuh beberapa hal untuk siapa pun yang menemukan ini.
Secara umum, jika Anda memfilter khusus pada nilai Date saja. Microsoft merekomendasikan untuk menggunakan format netral bahasa ymd
atau y-m-d
.
Perhatikan bahwa formulir '2007-02-12' dianggap bahasa-netral hanya untuk tipe data DATE, DATETIME2, dan DATETIMEOFFSET.
Untuk melakukan perbandingan tanggal menggunakan pendekatan tersebut sederhana. Pertimbangkan contoh berikut yang dibuat-buat.
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
CONVERT(char(8), OrderDate, 112) = @filterDate
Di dunia yang sempurna, melakukan manipulasi apa pun pada kolom yang difilter harus dihindari karena ini dapat mencegah SQL Server menggunakan indeks secara efisien. Yang mengatakan, jika data yang Anda simpan hanya peduli dengan tanggal dan bukan waktu, pertimbangkan menyimpan seperti DATETIME
tengah malam sebagai waktu. Karena:
Ketika SQL Server mengubah literal ke tipe kolom yang difilter, ia mengasumsikan tengah malam ketika bagian waktu tidak ditunjukkan. Jika Anda ingin filter seperti itu mengembalikan semua baris dari tanggal yang ditentukan, Anda harus memastikan bahwa Anda menyimpan semua nilai dengan tengah malam sebagai waktunya.
Jadi, anggap Anda hanya peduli dengan tanggal, dan simpan data Anda seperti itu. Kueri di atas dapat disederhanakan menjadi:
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
OrderDate = @filterDate