Memadankan Pertanyaan Tarikh sahaja dengan Medan Datetime dalam SQL Server
Apabila menanya medan datetime dalam SQL Server menggunakan nilai tarikh sahaja, ia adalah penting untuk memahami implikasi untuk memastikan hasil yang tepat.
Dalam yang disediakan contoh:
Select * from [User] U where U.DateCreated = '2014-02-07'
Jika pengguna dicipta pada '2014-02-07 12:30:47.220,' pertanyaan tidak akan mengembalikan hasil kerana ia hanya membandingkan nilai exactdatetime.
Pendekatan Disyorkan
Untuk menyelesaikan isu ini dan memadankan dengan tepat nilai tarikh sahaja dengan medan datetime, adalah disyorkan untuk menggunakan pendekatan berikut:
Select * from [User] U where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')
Pertanyaan ini menentukan julat yang merangkumi semua rekod dengan nilai datetime '2014-02-07' atau lebih baru tetapi sebelum '2014-02-08.'
Kepentingan Predikat SaRGable dan Mengelak Fungsi
Adalah penting untuk mengelak daripada menggunakan fungsi seperti convert() dalam klausa where apabila membandingkan nilai datetime dengan kriteria tarikh sahaja. Ini boleh menghalang penggunaan indeks, memperlahankan pertanyaan dan memperkenalkan pengiraan yang tidak perlu. Sebaliknya, mengubah suai pertanyaan agar sesuai dengan data (juga dikenali sebagai menggunakan predikat SARGable) meningkatkan prestasi pertanyaan.
Amalan Terbaik untuk Pertanyaan Julat Tarikh
Selain itu, dinasihatkan untuk elakkan menggunakan operator BETWEEN apabila menanyakan julat tarikh. Sebaliknya, gunakan borang berikut untuk hasil yang optimum:
WHERE col >= '20120101' AND col < '20120201'
Pendekatan ini memastikan keserasian dengan semua jenis data dan ketepatan serta menghapuskan isu yang berpotensi dengan komponen masa nilai datetime.
Atas ialah kandungan terperinci Bagaimana untuk Memadankan Pertanyaan Tarikh Sahaja dengan Medan DateTime dalam SQL Server dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!