sql >> Base de Datos >  >> RDS >> Sqlserver

¿MS SQL Server's between incluye los límites del rango?

El operador BETWEEN es inclusivo.

De Libros en línea:

ENTRE devuelve VERDADERO si el valor de expresión_prueba es mayor o igual que el valor de expresión_inicial y menor o igual que el valor de expresión_final.

Advertencia de fecha y hora

NB:con DateTimes hay que tener cuidado; si sólo se da una fecha, se toma el valor a partir de la medianoche de ese día; Para evitar perder horas dentro de la fecha de finalización o repetir la captura de los datos del día siguiente a la medianoche en varios rangos, la fecha de finalización debe ser 3 milisegundos antes de la medianoche del día siguiente a la fecha actual. 3 milisegundos porque cualquier valor inferior a este se redondeará a la medianoche del día siguiente.

p.ej. para obtener todos los valores dentro de junio de 2016, debe ejecutar:

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

es decir,

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

datetime2 y datetimeoffset

Restar 3 ms de una fecha lo dejará vulnerable a filas faltantes de la ventana de 3 ms. La solución correcta es también la más simple:

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