Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come faccio a confrontare due campi datetime in SQL Server 2005?

La domanda non è chiara, ma sembra che tu stia cercando di eseguire la corrispondenza di uguaglianza che non restituisce le righe che ti aspetti, quindi suppongo che il problema sia che i millisecondi sono problematici. Ci sono diversi approcci qui:

  1. formatta entrambi i valori (come varcharetc) usando CONVERT :costoso forCPU, impossibile usare index
  2. usa DATEDIFF/DATEPART per fare le cose - simile, ma non abbastanza poco costoso
  3. crea un intervallo tra cui cercare

La terza opzione è quasi sempre la più efficiente, poiché può fare buon uso dell'indicizzazione e non richiede grandi quantità di CPU.

Ad esempio, in quanto sopra, poiché la tua precisione è di secondi*, userei:

DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)

quindi aggiungi un WHERE del modulo:

WHERE column_datetime >= @p_date AND column_datetime < @end

Funzionerà meglio se hai un indice cluster su column_datetime, ma dovrebbe comunque funzionare correttamente se hai un indice non cluster su column_datetime.

[*=se @p_date include millisecondi dovresti pensare di più se tagliare quei ms tramite DATEADD o esegui un intervallo più piccolo, ecc.]