sql >> Databasteknik >  >> RDS >> Sqlserver

Hur jämför jag två datetime-fält i SQL Server 2005?

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:

  1. formatera båda värdena (som varcharetc) med CONVERT :dyrt för CPU, kan inte använda index
  2. använd DATEDIFF/DATEPART för att göra temat - liknande, men inte helt billigt
  3. 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]



  1. Vad är Jooq Transaktions isoleringsnivå? Kan smutsig läsning hända?

  2. PostgreSQL INSERT ON CONFLICT UPDATE (upsert) använd alla uteslutna värden

  3. Uppdaterar flera rader i en tabell

  4. Konvertera månadsnummer till månadsnamn i PostgreSQL