sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo comparo dos campos de fecha y hora en SQL Server 2005?

La pregunta no está clara, pero parece que está tratando de hacer la coincidencia de igualdad que no devuelve las filas que esperaba, por lo que supongo que el problema es que los milisegundos están siendo problemáticos. Hay varios enfoques aquí:

  1. formatee ambos valores (como varcharetc) usando CONVERT:costoso para CPU, no puede usar el índice
  2. use DATEDIFF/DATEPART para hacer los cálculos - similar, pero no del todo muy caro
  3. crear un rango para buscar

La tercera opción es casi siempre la más eficiente, ya que puede hacer un buen uso de la indexación y no requiere una gran cantidad de CPU.

Por ejemplo, en lo anterior, dado que su precisión es de segundos*, usaría:

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

luego agregue un DONDE de la forma:

WHERE column_datetime >= @p_date AND column_datetime < @end

Esto funcionará mejor si tiene un índice agrupado en column_datetime, pero aún debería funcionar bien si tiene un índice no agrupado en column_datetime.

[*=si @p_date incluye milisegundos, debe pensar más en recortar esos ms a través de DATEADD , o hacer un rango más pequeño, etc.]