Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

MS SQL Server tra include i limiti dell'intervallo?

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'