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

Bagaimana cara membandingkan dua bidang datetime di SQL Server 2005?

Pertanyaannya tidak jelas, tetapi sepertinya Anda mencoba melakukan pencocokan kesetaraan yang tidak mengembalikan baris yang Anda harapkan, jadi saya menduga masalahnya adalah milidetiknya bermasalah. Ada beberapa pendekatan di sini:

  1. format kedua nilai (sebagai varcharetc) menggunakan CONVERT :forCPU mahal, tidak dapat menggunakan indeks
  2. gunakan DATEDIFF/DATEPART untuk mengerjakan soal - serupa, tetapi tidak cukup murah
  3. buat rentang untuk mencari di antara

Opsi ke-3 hampir selalu yang paling efisien, karena dapat memanfaatkan pengindeksan dengan baik, dan tidak memerlukan banyak CPU.

Misalnya, di atas, karena presisi Anda adalah detik*, saya akan menggunakan:

DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)

lalu tambahkan WHERE dari formulir:

WHERE column_datetime >= @p_date AND column_datetime < @end

Ini akan bekerja paling baik jika Anda memiliki indeks berkerumun pada column_datetime, tetapi akan tetap berfungsi dengan baik jika Anda memiliki indeks yang tidak berkerumun pada column_datetime.

[*=jika @p_date menyertakan milidetik, Anda harus lebih memikirkan apakah akan memangkas ms tersebut melalui DATEADD , atau lakukan rentang yang lebih kecil, dll]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. String Koneksi FTP menggunakan ekspresi di SSIS

  2. Menggunakan SQL Server Express 2008 dengan database SQL Server 2005 -cara memeriksa kompatibilitas

  3. Bagaimana cara menjalankan paket SSIS dari .NET?

  4. Bagaimana saya bisa menanyakan budaya database (SQL Server 2005)?

  5. Sumber daya apa yang tersedia untuk penyetelan kinerja Database?