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:
- format kedua nilai (sebagai varcharetc) menggunakan CONVERT :forCPU mahal, tidak dapat menggunakan indeks
- gunakan DATEDIFF/DATEPART untuk mengerjakan soal - serupa, tetapi tidak cukup murah
- 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]