Eu tenho um start_date
e end_date
. Quero obter a lista de datas entre essas duas datas. Alguém pode me ajudar a apontar o erro na minha consulta.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Aqui Date
está uma datetime
variável.
sql
sql-server
tsql
datetime
sql-server-2005
Neeraj
fonte
fonte
between
deve funcionar como esperado.Como uma data e hora sem um segmento de tempo especificado terá um valor de
date 00:00:00.000
, se você quiser ter todas as datas em seu intervalo, deve fornecer a hora para a data final ou aumentar a data e o uso final<
.OU
OU
NÃO use o seguinte, pois pode retornar alguns registros a partir de 28/02/2011 se o horário deles for 00: 00: 00.000.
fonte
'2011/02/28 00:00:00.000'
?convert(date, Date) between '2011/02/25' and '2011/02/27'
(pelo menos com um MS SQL Server recente). Aconvert()
peça cuidará da remoção da parte do tempo e a comparação entre as peças funcionará conforme o esperado.Tente o seguinte:
Os valores da data precisam ser digitados como seqüências de caracteres.
Para garantir que sua consulta para o SQL Server 2008 e superior
Date
seja preparada para o futuro, ela deve ser escapada porque é uma palavra reservada em versões posteriores.Lembre-se de que as datas sem horário são consideradas meia-noite como padrão; portanto, você pode não ter o valor correto lá.
fonte
Aqui, primeiro adicione um dia à
2011-02-28 00:00:00
data final atual, será , e você subtrairá um segundo para criar a data final2011-02-27 23:59:59
. Ao fazer isso, você pode obter todas as datas entre os intervalos especificados.fonte
- se o tipo de dados for diferente
fonte
Essa consulta é boa para buscar os valores entre a data atual e as próximas 3 datas
Eventualmente, isso adicionará 3 dias extras de buffer à data atual.
fonte
Isso é muito antigo, mas, com muitas experiências que tive com datas, você pode considerar o seguinte: as pessoas usam configurações regionais diferentes; portanto, algumas pessoas (e alguns bancos de dados / computadores, dependendo das configurações regionais) podem ler isso 12/11/2016 como 11 de dezembro de 2016 ou 12 de novembro de 2016. Ainda mais, 16/11/12 fornecido ao banco de dados MySQL será convertido internamente para 12 de novembro de 2016, enquanto o banco de dados do Access executado em um computador de configuração regional do Reino Unido interpretará e armazená-lo como 16 de novembro de 2012.
Portanto, tornei minha política explícita sempre que vou interagir com datas e bancos de dados. Por isso, sempre forneço minhas consultas e códigos de programação da seguinte maneira:
Observe também que o Access aceitará o #, assim:
mas o MS SQL Server não, então eu sempre uso "'" como acima, que ambos os bancos de dados aceitam.
E ao obter essa data de uma variável no código, eu sempre converto o resultado em string da seguinte maneira:
Estou escrevendo isso porque sei que algumas vezes alguns programadores podem não estar interessados o suficiente para detectar a conversão inerente. Não haverá erro para datas <13, apenas resultados diferentes!
Quanto à pergunta, adicione um dia à última data e faça a comparação da seguinte forma:
fonte
fonte
Tente colocar as datas entre # #, por exemplo:
Funcionou para mim.
fonte
se a data em 24 horas e começar de manhã e terminar à noite, adicione algo como:
fonte
melhor consulta para a data selecionada entre a data atual e os três dias anteriores :
melhor consulta para a data selecionada entre a data atual e os próximos três dias :
fonte
Confira abaixo Exemplos: Trabalhando e Não trabalhando.
OU
OU
E abaixo não está funcionando:
fonte
podemos usar entre para mostrar dados de duas datas, mas isso pesquisará todos os dados e comparará, para tornar nosso processo lento para grandes dados, então sugiro que todos usem
datediff
:aqui o calendário é a tabela, dt como a variável da data de início e dt2 é a variável da data de término.
fonte
Eu gosto de usar a sintaxe '1 MonthName 2015' para datas ex:
para datas
fonte
Eu iria para
Como a lógica
>=
inclui toda a data de início e<
exclui a data de término, adicionamos uma unidade à data de término. Isso pode ser adaptado por meses, por exemplo:fonte
fonte
Você pode tentar este SQL
fonte
Realmente todas as datas sql devem estar no formato aaaa-MM-dd para obter resultados mais precisos.
fonte
fonte
é melhor escrever desta maneira:
fonte
fonte