Spørgsmålet er uklart, men det ser ud til, at du forsøger at lave et lighedsmatch, der ikke returnerer de rækker, du forventer, så jeg gætter på, at problemet er, at millisekunderne er problematiske. Der er flere tilgange her:
- formater begge værdier (som varcharetc) ved hjælp af CONVERT :dyrt for CPU, kan ikke bruge indeks
- brug DATEDIFF/DATEPART til at lave tema - lignende, men ikke helt billigt
- opret et område at søge mellem
Den 3. mulighed er næsten altid den mest effektive, da den kan gøre god brug af indeksering og ikke kræver masser af CPU.
For eksempel, i ovenstående, da din præcision er sekunder*, ville jeg bruge:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
derefter tilføje et WHERE af formularen:
WHERE column_datetime >= @p_date AND column_datetime < @end
Dette vil fungere bedst, hvis du har et klynget indeks på column_datetime, men burde stadig fungere OK, hvis du har et ikke-klynget indeks på column_datetime.
[*=hvis @p_date inkluderer millisekunder, skal du tænke mere over, om du vil trimme disse ms via DATEADD
, eller lav et mindre område osv.]