Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment comparer deux champs datetime dans SQL Server 2005 ?

La question n'est pas claire, mais il semble que vous essayez de faire la correspondance d'égalité qui ne renvoie pas les lignes que vous attendez, donc je suppose que le problème est que les millisecondes posent problème. Il existe plusieurs approches ici :

  1. formater les deux valeurs (comme varcharetc) en utilisant CONVERT :coûteux pour le processeur, impossible d'utiliser l'index
  2. utiliser DATEDIFF/DATEPART pour faire le calcul - similaire, mais pas tout à fait pas cher
  3. créer une plage de recherche entre

La 3ème option est presque toujours la plus efficace, car elle peut faire bon usage de l'indexation et ne nécessite pas de masse de CPU.

Par exemple, dans ce qui précède, puisque votre précision est de secondes*, j'utiliserais :

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

puis ajoutez un WHERE de la forme :

WHERE column_datetime >= @p_date AND column_datetime < @end

Cela fonctionnera mieux si vous avez un index clusterisé sur column_datetime, mais devrait toujours fonctionner correctement si vous avez un index non clusterisé sur column_datetime.

[*=si @p_date inclut des millisecondes, vous devez réfléchir davantage à l'opportunité de couper ces ms via DATEADD , ou faire une plage plus petite, etc]