Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie vergleiche ich zwei datetime-Felder in SQL Server 2005?

Die Frage ist unklar, aber es sieht so aus, als ob Sie versuchen, die Gleichheitsübereinstimmung durchzuführen, die nicht die erwarteten Zeilen zurückgibt, also vermute ich, dass das Problem darin besteht, dass die Millisekunden problematisch sind. Hier gibt es mehrere Ansätze:

  1. formatiere beide Werte (als varcharetc) mit CONVERT :teuer für CPU, Index kann nicht verwendet werden
  2. verwenden Sie DATEDIFF/DATEPART, um die Berechnung durchzuführen - ähnlich, aber ganz asteuer
  3. Erstellen Sie einen Bereich, in dem gesucht werden soll

Die dritte Option ist fast immer die effizienteste, da sie die Indizierung gut nutzen kann und nicht viel CPU benötigt.

Da Ihre Genauigkeit im obigen Beispiel Sekunden* beträgt, würde ich verwenden:

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

fügen Sie dann ein WHERE der Form hinzu:

WHERE column_datetime >= @p_date AND column_datetime < @end

Dies funktioniert am besten, wenn Sie einen geclusterten Index auf column_datetime haben, sollte aber immer noch gut funktionieren, wenn Sie einen nicht geclusterten Index auf column_datetime haben.

[*=Wenn @p_date Millisekunden enthält, müssen Sie genauer überlegen, ob Sie diese ms über DATEADD kürzen , oder machen Sie einen kleineren Bereich usw.]