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

Est-ce que MS SQL Server entre inclut les limites de plage ?

L'opérateur BETWEEN est inclusif.

À partir de Livres en ligne :

BETWEEN renvoie TRUE si la valeur de test_expression est supérieure ou égale à la valeur de begin_expression et inférieure ou égale à la valeur de end_expression.

Mise en garde concernant la date et l'heure

NB :Avec DateTimes il faut faire attention; si seule une date est indiquée, la valeur est prise à minuit ce jour-là ; Pour éviter de manquer des heures dans votre date de fin ou de répéter la capture des données du jour suivant à minuit dans plusieurs plages, votre date de fin doit être 3 millisecondes avant minuit le jour suivant votre date de fin. 3 millisecondes, car toute valeur inférieure à cette valeur sera arrondie à minuit le lendemain.

par exemple. pour obtenir toutes les valeurs en juin 2016, vous devez exécuter :

where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')

c'est-à-dire

where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'

datetime2 et datetimeoffset

Soustraire 3 ms d'une date vous rendra vulnérable aux lignes manquantes de la fenêtre de 3 ms. La bonne solution est aussi la plus simple :

where myDateTime >= '20160601' AND myDateTime < '20160701'