sql >> Database >  >> RDS >> Sqlserver

Hoe vergelijk ik twee datetime-velden in SQL Server 2005?

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:

  1. formatteer beide waarden (als varcharetc) met CONVERT :dure forCPU, kan index niet gebruiken
  2. gebruik DATEDIFF/DATEPART om thema's te doen - vergelijkbaar, maar niet helemaal goedkoop
  3. 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.]



  1. Controleer de status van de database-e-mailwachtrijen in SQL Server (T-SQL)

  2. Zijn mijn MySQL-serververbindingen versleuteld en veilig?

  3. Weergave niet actief - percentile_cont

  4. SQL Server-synchronisatie met MySQL-programma