Въпросът е неясен, но изглежда, че се опитвате да направите съвпадението за равенство, което не връща редовете, които очаквате, така че предполагам, че проблемът е, че милисекундите са проблематични. Тук има няколко подхода:
- форматирайте и двете стойности (като varcharetc) с помощта на CONVERT:скъпо за CPU, не може да използва индекс
- използвайте DATEDIFF/DATEPART, за да ги изчислите - подобно, но не съвсем толкова скъпо
- създайте диапазон за търсене между
Третият вариант почти винаги е най-ефикасен, тъй като може да използва добре индексирането и не изисква много CPU.
Например в горното, тъй като вашата точност е секунди*, бих използвал:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
след това добавете WHERE от формата:
WHERE column_datetime >= @p_date AND column_datetime < @end
Това ще работи най-добре, ако имате клъстериран индекс на column_datetime, но все пак трябва да работи добре, ако имате неклъстерен индекс на column_datetime.
[*=ако @p_date включва милисекунди, трябва да помислите повече дали да отрежете тези ms чрез DATEADD
, или направете по-малък диапазон и т.н.]