L'operatore BETWEEN è inclusivo.
Dai libri in linea:
BETWEEN restituisce TRUE se il valore ditest_expression è maggiore o uguale al valore di inizio_espressionee minore o uguale al valore diend_expression.
Avvertenza su DateTime
NB:Con DateTimes devi stare attento; se viene indicata solo una data, il valore viene preso a partire dalla mezzanotte di quel giorno; per evitare di perdere i tempi all'interno della data di fine o di ripetere l'acquisizione dei dati del giorno successivo a mezzanotte in più intervalli, la data di fine dovrebbe essere 3 millisecondi prima della mezzanotte del giorno successivo alla data. 3 millisecondi perché qualsiasi valore inferiore a questo verrà arrotondato alla mezzanotte del giorno successivo.
per esempio. per ottenere tutti i valori entro giugno 2016 devi eseguire:
where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')
cioè
where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'
datetime2 e datetimeoffset
Sottrarre 3 ms da una data ti renderà vulnerabile alle righe mancanti dalla finestra di 3 ms. La soluzione corretta è anche la più semplice:
where myDateTime >= '20160601' AND myDateTime < '20160701'