DATEDIFF () ou BETWEEN pour les plages de dates dans les requêtes SQL

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'