De vraag is onduidelijk, maar het lijkt erop dat je de gelijkheidsovereenkomst probeert te doen die niet de rijen oplevert die je verwacht, dus ik vermoed dat het probleem is dat de milliseconden problematisch zijn. Er zijn hier verschillende benaderingen:
- formatteer beide waarden (als varcharetc) met CONVERT :dure forCPU, kan index niet gebruiken
- gebruik DATEDIFF/DATEPART om thema's te doen - vergelijkbaar, maar niet helemaal goedkoop
- maak een bereik om tussen te zoeken
De derde optie is bijna altijd de meest efficiënte, omdat deze goed gebruik kan maken van indexering en geen massa's CPU vereist.
Bijvoorbeeld, in het bovenstaande, aangezien uw precisie seconden* is, zou ik het volgende gebruiken:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
voeg dan een WHERE van het formulier toe:
WHERE column_datetime >= @p_date AND column_datetime < @end
Dit werkt het beste als je een geclusterde index op column_datetime hebt, maar zou nog steeds goed moeten werken als je een niet-geclusterde index op column_datetime hebt.
[*=als @p_date milliseconden bevat, moet je meer nadenken over het trimmen van die ms via DATEADD
, of doe een kleiner bereik, enz.]