bonjour, j'ai deux colonnes en datetime, je veux les comparer mais l'heure, minut et seconde ne doivent pas affecter ma comparaison, j'ai converti les dattime en smalldatetime, mais ca n'a pas marché, vous avez une idée ?
bonjour, j'ai deux colonnes en datetime, je veux les comparer mais l'heure, minut et seconde ne doivent pas affecter ma comparaison, j'ai converti les dattime en smalldatetime, mais ca n'a pas marché, vous avez une idée ?
Bonjour,
Essaye une comparaison en enlevant les HH:MM:SS :
CONVERT(VARCHAR, date1, 103) = CONVERT(VARCHAR, date2, 103)
103 permet d'afficher la date sous la forme "jj/mm/aaaa".
Par exemple, faire simplement une comparaison année + numéro du jour dans l'année :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DATEPART(YEAR, Date1) = DATEPART(Year, Date2) AND DATEPART(DAYOFYEAR, Date1) = DATEPART(DAYOFYEAR, Date2)
Ou si vous êtes en SQL Server 2008, un cast en DATE et c'est réglé![]()
Bonjour,
Le problème, c'est que si un tel prédicat est utilisé dans la clause WHERE d'une requête, alors celui n'est pas sargable (à vérifier sous SQL Server 2008), et la requête ne sera donc pas performante.
On peut passer outre en ajoutant une colonne calculée, et en l'indexant
@++![]()
Depuis SQL Server 2008 le cast datetime en date fait que l’optimiseur saura toujours utiliser l’index établi sur le champ de type datetime (à l'image de like 'aaa%' pour un champ varchar puisque la date constitue le début datetime)
Donc, à priori, il faut toute fois faire des tests, la clause where reste sargable.
C’est bien expliqué dans le blog de mikedavem ici
Il faut utiliser la fonction CAST (pas de convert varchar etc..)
Code : Sélectionner tout - Visualiser dans une fenêtre à part CAST(date1 AS DATE) = CAST(date2 AS DATE)
Partager