Por exemplo, pode
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
selecione 5 e 10 ou eles são excluídos do intervalo?
fonte
Por exemplo, pode
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
selecione 5 e 10 ou eles são excluídos do intervalo?
O operador BETWEEN é inclusivo.
Dos Livros Online:
BETWEEN retornará VERDADEIRO se o valor da expressão de teste for maior ou igual ao valor de expressão de início e menor ou igual ao valor de expressão de final.
DateTime Advertência
NB: Com o DateTimes, você deve ter cuidado; se apenas uma data for fornecida, o valor será obtido a partir da meia-noite desse dia; para evitar horas perdidas na data de término ou repetir a captura dos dados do dia seguinte à meia-noite em vários intervalos, a data de término deve ser de 3 milissegundos antes da meia-noite do dia seguinte à sua data de validade. 3 milissegundos porque menos do que isso e o valor será arredondado para meia-noite no dia seguinte.
por exemplo, para obter todos os valores em junho de 2016, você precisa executar:
where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')
ie
where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'
Subtrair 3 ms de uma data deixará você vulnerável a linhas ausentes da janela de 3 ms. A solução correta também é a mais simples:
where myDateTime >= '20160601' AND myDateTime < '20160701'
CONVERT
um datetime para uma data , pois isso tornará os índices inúteis. Use o padrãoWHERE OrderDate >= '20160601' AND OrderDate < '20160701'
. Além disso, certifique-se de usaryyyymmdd
, poisyyyy-mm-dd
depende da localidade e será mal interpretado, dependendo damdy, dmy, ymd, ydm, myd, and dym
configuração do servidor .Sim, mas tenha cuidado ao usar entre datas.
é realmente interpretado como 12h, ou
perderá tudo o que ocorreu durante o dia 31 de janeiro. Nesse caso, você terá que usar:
ou
ATUALIZAÇÃO : É perfeitamente possível criar registros dentro desse último segundo do dia, com data e hora posteriores a
20090101 23:59:59.997
!!Por esse motivo, a
BETWEEN (firstday) AND (lastday 23:59:59)
abordagem não é recomendada.Use a
myDate >= (firstday) AND myDate < (Lastday+1)
abordagem em seu lugar.Bom artigo sobre esta questão aqui .
fonte
WHERE col BETWEEN 'a' AND 'z'
excluirão a maioria das linhas z, por exemplo.BETWEEN 5 AND 10
não inclui10.2
...CAST
ing odatetime
comoDATE
iria funcionar:CAST(DATE_TIME_COL AS DATE) BETWEEN '01/01/2009' AND '01/31/2009'
.It is entirely possible to have records created within that last second of the day, with a datetime as late as 01/01/2009 23:59:59.997
<- você não poderia usar entãoAND '01/31/2009 23:59:59.99999999'
ou são necessários muitos 9'sExemplo do mundo real do SQL Server 2008.
Dados de origem:
Inquerir:
Resultados:
fonte
ID = 3
excluída? SeuStart
valor é igual aoBETWEEN
valor do limite superior eBETWEEN
é um intervalo inclusivo, não um intervalo exclusivo do limite superior.se você acertar isso e realmente não quiser tentar adicionar um dia no código, deixe o banco de dados fazer isso ..
Se você incluir a parte da hora: verifique se ela faz referência à meia-noite. Caso contrário, você pode simplesmente omitir a hora:
e não se preocupe com isso.
fonte
fonte
Se o tipo de dados da coluna for datetime, você poderá fazer o seguinte para eliminar o tempo do datetime e comparar apenas o período.
fonte
Inclui limites.
fonte
Eu sempre usei isso:
ONDE myDate ENTRE startDate AND (endDate + 1)
fonte