Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak porównać dwa pola daty i godziny w programie SQL Server 2005?

Pytanie jest niejasne, ale wygląda na to, że próbujesz wykonać dopasowanie równości, które nie zwraca oczekiwanych wierszy, więc zgaduję, że problem polega na tym, że milisekundy są problematyczne. Istnieje kilka podejść tutaj:

  1. sformatuj obie wartości (jako varcharetc) używając CONVERT:drogie dla procesora, nie można użyć indeksu
  2. użyj DATEDIFF/DATEPART do wykonania tematu — podobnie, ale nie zupełnie tak drogie
  3. utwórz zakres do przeszukiwania

Trzecia opcja jest prawie zawsze najbardziej wydajna, ponieważ może dobrze wykorzystać indeksowanie i nie wymaga dużej ilości procesora.

Na przykład w powyższym, ponieważ twoja precyzja to sekundy*, użyłbym:

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

następnie dodaj GDZIE formularza:

WHERE column_datetime >= @p_date AND column_datetime < @end

Będzie to działać najlepiej, jeśli masz indeks klastrowy na column_datetime, ale powinno nadal działać poprawnie, jeśli masz indeks nieklastrowy na column_datetime.

[*=jeśli @p_date zawiera milisekundy, musisz zastanowić się, czy przyciąć te ms za pomocą DATEADD lub zrób mniejszy zakres itp.]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć _dokładny_ błąd w SQL Server?

  2. Dlaczego Datediff między GETDATE() i SYSDATETIME() w milisekundach jest zawsze różne?

  3. Funkcja krzyża tabulacji SQL

  4. Wstaw wyniki procedury składowanej do tabeli tymczasowej

  5. Aktualizacja jednej kolumny na podstawie wartości innej kolumny