sql date()




Consulta SQL para selecionar datas entre duas datas (13)

é melhor escrever assim:

CREATE PROCEDURE dbo.Get_Data_By_Dates
(
    @EmployeeId INT = 1,
    @Start_Date DATE,
    @End_Date Date
)
AS
Select * FROM Calculation  
    where EmployeeId[email protected]EmployeeId AND Test_Date BETWEEN @Start_Date AND @End_Date
RETURN

Eu tenho um start_date e end_date . Eu quero pegar a lista de datas entre essas duas datas. Alguém pode me ajudar apontando 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 é uma variável datetime .


Como uma data / hora sem um segmento de tempo especificado terá um valor de date 00:00:00.000 , se você quiser ter certeza de obter todas as datas em seu intervalo, deverá fornecer a hora para sua data final ou aumentar sua data final. e use < .

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date between '2011/02/25' and '2011/02/27 23:59:59.999'

OU

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date >= '2011/02/25' and Date < '2011/02/28'

OU

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'

NÃO use o seguinte, pois ele pode retornar alguns registros de 2011/02/28 se o horário for 00: 00: 00.000.

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date between '2011/02/25' and '2011/02/28'

Esta consulta é boa para buscar os valores entre a data atual e as próximas 3 datas

SELECT * FROM tableName  WHERE columName 
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)

Isso acabará adicionando 3 dias extras de buffer à data atual.


Eu gosto de usar a sintaxe '1 MonthName 2015' para datas ex:

   WHERE aa.AuditDate>='1 September 2015'
     AND aa.AuditDate<='30 September 2015'

para datas


Isso é muito antigo, mas, considerando muitas experiências com datas, convém considerar isso: as pessoas usam diferentes configurações regionais, portanto, algumas pessoas (e alguns bancos de dados / computadores, dependendo das configurações regionais) podem ler essa informação. data 11/12/2016 em 11 de dezembro de 2016 ou 12 de novembro de 2016. Ainda mais, 16/11/12 fornecido para o banco de dados MySQL será convertido internamente em 12 de novembro de 2016, enquanto o banco de dados Access em execução em um computador de configuração regional do Reino Unido interpretará e armazená-lo como 16 de novembro de 2012.

Por isso, fiz com que minha política fosse explícita sempre que eu interagisse com datas e bancos de dados. Por isso, sempre forneço minhas consultas e códigos de programação da seguinte maneira:

SELECT FirstName FROM Students WHERE DoB >= '11 Dec 2016';

Note também que o Access aceitará o #, assim:

SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;

mas 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, sempre converto o resultado em string da seguinte forma:

"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")

Eu estou escrevendo isso porque eu sei que algumas vezes alguns programadores podem não estar suficientemente interessados ​​em 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:

dated >= '11 Nov 2016' AND dated < '15 Nov 2016' 

Se a sua data em 24 horas e começar de manhã e terminar a noite deve adicionar algo como:

declare @Approval_date datetime
set @Approval_date =getdate()
Approval_date between @Approval_date +' 00:00:00.000' and @Approval_date +' 23:59:59.999'

Tente isto:

select Date,TotalAllowance from Calculation where EmployeeId=1
             and [Date] between '2011/02/25' and '2011/02/27'

Os valores de data precisam ser digitados como strings.

Para garantir uma consulta futura do SQL Server 2008 e posterior, Date deve ter escape porque é uma palavra reservada em versões posteriores.

Lembre-se de que as datas sem horários tomam a meia-noite como padrão, portanto talvez você não tenha o valor correto.


Você pode tentar este SQL

select * from employee where rec_date between '2017-09-01' and '2017-09-11' 

podemos usar entre para mostrar dois dados de datas, mas isso irá procurar os dados completos e comparar, o que tornará nosso processo lento para dados enormes, então eu sugiro que todos usem o datediff :

qry = "SELECT * FROM [calender] WHERE datediff(day,'" & dt & "',[date])>=0 and datediff(day,'" & dt2 & "',[date])<=0 "

aqui calendário é a tabela, dt como a variável de data de início e dt2 é a variável de data de conclusão.


você deve colocar essas duas datas entre aspas simples como ..

select Date, TotalAllowance from Calculation where EmployeeId = 1
             and Date between '2011/02/25' and '2011/02/27'

ou pode usar

select Date, TotalAllowance from Calculation where EmployeeId = 1
             and Date >= '2011/02/25' and Date <= '2011/02/27'

Select 
    * 
from 
    Calculation 
where 
    EmployeeId=1 and Date between #2011/02/25# and #2011/02/27#;

select * from table_name where col_Date between '2011/02/25' 
AND DATEADD(s,-1,DATEADD(d,1,'2011/02/27'))

Aqui, primeiro adicione um dia ao endDate atual, será 2011-02-28 00:00:00 , então você subtrai um segundo para fazer a data final 2011-02-27 23:59:59 . Ao fazer isso, você pode obter todas as datas entre os intervalos fornecidos.

output:
2011/02/25
2011/02/26
2011/02/27

select Date,TotalAllowance 
from Calculation 
where EmployeeId=1
  and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27'






sql-server-2005