Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O MS SQL Server entre inclui os limites de intervalo?


O operador BETWEEN é inclusivo.

Dos livros on-line:

BETWEEN retornará TRUE se o valor detest_expression for maior ou igual ao valor de begin_expression e menor ou igual ao valor de end_expression.

Advertência de data e hora

NB:Com DateTimes é preciso ter cuidado; se for indicada apenas uma data, o valor é considerado a partir da meia-noite desse dia; para evitar tempos perdidos em sua data de término ou repetir a captura dos dados do dia seguinte à meia-noite em vários intervalos, sua data de término deve ser 3 milissegundos antes da meia-noite do dia seguinte à sua data de término. 3 milissegundos porque menos que isso e o valor será arredondado para a meia-noite do dia seguinte.

por exemplo. para obter todos os valores em junho de 2016, você precisaria executar:

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

ou seja

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

datetime2 e datetimeoffset


Subtrair 3 ms de uma data o deixará vulnerável à falta de linhas da janela de 3 ms. A solução correta também é a mais simples:
where myDateTime >= '20160601' AND myDateTime < '20160701'