Frågan är oklar, men det ser ut som att du försöker göra en jämställdhetsmatchning som inte ger de rader du förväntar dig, så jag gissar att problemet är att millisekunderna är problematiska. Det finns flera tillvägagångssätt här:
- formatera båda värdena (som varcharetc) med CONVERT :dyrt för CPU, kan inte använda index
- använd DATEDIFF/DATEPART för att göra temat - liknande, men inte helt billigt
- skapa ett intervall att söka mellan
Det 3:e alternativet är nästan alltid det mest effektiva, eftersom det kan dra nytta av indexering och inte kräver massor av CPU.
Till exempel, i ovanstående, eftersom din precision är sekunder*, skulle jag använda:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
lägg sedan till en WHERE av formuläret:
WHERE column_datetime >= @p_date AND column_datetime < @end
Detta fungerar bäst om du har ett klustrat index på column_datetime, men bör fortfarande fungera OK om du har ett icke-klustrat index på column_datetime.
[*=om @p_date inkluderar millisekunder måste du tänka mer på om du ska trimma dessa ms via DATEADD
, eller gör ett mindre intervall, etc]