J'ai récemment été informé que l'utilisation de la méthode BETWEEN
en SQL est assez peu fiable, et que je devrais donc utiliser DATEDIFF()
. Cependant, un autre programmeur m'a informé que ce n'est pas le cas et que la méthode BETWEEN
fonctionne brillamment dans tous les cas tant que la date est correctement formatée.
S'il vous plaît quelqu'un pourrait régler ce débat en indiquant quelle méthode est meilleure et pourquoi?
À l'heure actuelle, ma plage de dates SQL ressemble à ceci:
DATEDIFF(d,'01-Jan-1970',SIH.[Something_Date]) >= 0 AND DATEDIFF(d,'01-Jan-2013',SIH.[Something_Date]) <= 0
Cependant, je préférerais l'écrire comme ça si je peux être sûr que c'est fiable:
SIH.[Something_Date] BETWEEN '01-Jan-1970' AND '01-Jan-2013'
Dans ce cas particulier, j'utilise MsSQL, cependant, j'ai tagué MySQL car je voudrais savoir si cela s'applique ici aussi
Vos deux requêtes ne sont pas équivalentes. La version de datediff
inclura toutes les valeurs du 01-Jan-2013
indépendamment du time tandis que la version entre inclura seulement les lignes le 01-Jan-2013
où l'heure est 00:00:00
.
Si vous vérifiez par rapport à la plage et ne faites aucun calcul sur la colonne, votre requête pourra utiliser un index sur Something_Date
et en même time inclure toutes les valeurs du 01-Jan-2013
quelle que soit la partie time.
where SIH.[Something_Date] >= '19700101' and SIH.[Something_Date] < '20130102'