Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana membandingkan datetime dengan hanya tanggal di SQL Server

JANGAN tergoda untuk melakukan hal-hal seperti ini:

Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'

Ini cara yang lebih baik:

Select * from [User] U 
where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')

lihat:Apa arti sebenarnya dari kata “SARGable”?

EDIT +Ada 2 alasan mendasar untuk menghindari penggunaan fungsi pada data dalam klausa where (atau dalam kondisi join).

  1. Dalam kebanyakan kasus, menggunakan fungsi pada data untuk memfilter atau menggabungkan menghilangkan kemampuan pengoptimal untuk mengakses indeks pada bidang tersebut, sehingga membuat kueri lebih lambat (atau lebih "mahal")
  2. Yang lainnya adalah, untuk setiap baris data yang terlibat setidaknya ada satu perhitungan yang dilakukan. Itu bisa menambahkan ratusan, ribuan, atau jutaan perhitungan ke kueri sehingga kami dapat membandingkan dengan satu kriteria seperti 2014-02-07 . Jauh lebih efisien untuk mengubah kriteria agar sesuai dengan data.

"Mengubah kriteria agar sesuai dengan data" adalah cara saya menjelaskan "gunakan SARGABLE predikat"

Dan jangan gunakan keduanya.

praktik terbaik dengan rentang tanggal dan waktu adalah menghindari ANTARA dan selalu menggunakan formulir:

WHERE col>='20120101' AND col <'20120201' Formulir ini bekerja dengan semua jenis dan semua presisi, terlepas dari apakah bagian waktu dapat diterapkan.

http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (Itzik Ben-Gan)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Database Online Dari Restore Mode di SQL Server

  2. Cara Memperbaiki "Nama korelasi harus ditentukan untuk kumpulan baris massal di klausa dari." di SQL Server

  3. Cara Memperbaiki "Server tidak dikonfigurasi untuk AKSES DATA" di SQL Server

  4. Apa itu prosedur tersimpan?

  5. ORDER BY DATE menampilkan NULLS terlebih dahulu kemudian tanggal terbaru