sql - rango - obtener registros entre dos fechas oracle
Consulta SQL para seleccionar fechas entre dos fechas. (19)
Dado que una fecha y hora sin un segmento de tiempo específico tendrá un valor de date 00:00:00.000
, si desea asegurarse de obtener todas las fechas en su rango, debe proporcionar la hora de su fecha de finalización o aumentar su fecha de finalización. y usar <
.
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between ''2011/02/25'' and ''2011/02/27 23:59:59.999''
O
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= ''2011/02/25'' and Date < ''2011/02/28''
O
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= ''2011/02/25'' and Date <= ''2011/02/27 23:59:59.999''
NO use lo siguiente, ya que podría devolver algunos registros del 28/02/2011 si sus horas son 00: 00: 00.000.
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between ''2011/02/25'' and ''2011/02/28''
Tengo una fecha de start_date
y una fecha de end_date
. Quiero obtener la lista de fechas entre estas dos fechas. ¿Puede alguien ayudarme a señalar el error en mi consulta.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Aquí la Date
es una variable de datetime
y datetime
.
Deberías poner esas dos fechas entre comillas simples como ...
select Date, TotalAllowance from Calculation where EmployeeId = 1
and Date between ''2011/02/25'' and ''2011/02/27''
o puede usar
select Date, TotalAllowance from Calculation where EmployeeId = 1
and Date >= ''2011/02/25'' and Date <= ''2011/02/27''
Esta consulta es válida para obtener los valores entre la fecha actual y las siguientes 3 fechas.
SELECT * FROM tableName WHERE columName
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
Esto eventualmente agregará 3 días adicionales de búfer a la fecha actual.
Esto es muy antiguo, pero dada la gran cantidad de experiencias que he tenido con las fechas, es posible que desee considerar esto: la gente usa diferentes configuraciones regionales, como tal, algunas personas (y algunas bases de datos / computadoras, dependiendo de la configuración regional) pueden leer esto. fecha 11/12/2016 como 11 de diciembre de 2016 o 12 de noviembre de 2016. Más aún, el 16/11/12 suministrado a la base de datos MySQL se convertirá internamente al 12 de noviembre de 2016, mientras que la base de datos Access que se ejecuta en una computadora de configuración regional del Reino Unido interpretará y almacenarlo como 16 de noviembre de 2012.
Por lo tanto, hice que mi política fuera explícita cuando iba a interactuar con fechas y bases de datos. Así que siempre proporciono mis consultas y códigos de programación de la siguiente manera:
SELECT FirstName FROM Students WHERE DoB >= ''11 Dec 2016'';
Tenga en cuenta también que Access aceptará el #, por lo tanto:
SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;
pero el servidor MS SQL no lo hará, por lo que siempre uso "''" como anteriormente, que ambas bases de datos aceptan.
Y cuando obtengo esa fecha de una variable en el código, siempre convierto el resultado en una cadena de la siguiente manera:
"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")
Estoy escribiendo esto porque sé que a veces algunos programadores pueden no estar lo suficientemente interesados para detectar la conversión inherente. ¡No habrá error para las fechas <13, solo resultados diferentes!
En cuanto a la pregunta, agregue un día a la última fecha y haga la comparación de la siguiente manera:
dated >= ''11 Nov 2016'' AND dated < ''15 Nov 2016''
Intente poner las fechas entre # # por ejemplo:
#2013/4/4# and #2013/4/20#
Funcionó para mí.
--- EDITAR --- Recibí una notificación de que perdí dos puntos de reputación porque alguien rechazó esta respuesta. Por favor, no solo vote hacia abajo si la respuesta no funciona para usted. Solicite más información / ayuda en los comentarios o consulte otras soluciones.
No me importan los puntos de reputación, solo digo que los votos negativos no se hacen para eso.
La mejor consulta para la fecha seleccionada entre la fecha actual y tres días atrás :
select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN
DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND CURDATE()
La mejor consulta para la fecha seleccionada entre la fecha actual y los próximos tres días :
select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN
CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
Me gusta usar la sintaxis ''1 MonthName 2015'' para fechas ex:
WHERE aa.AuditDate>=''1 September 2015''
AND aa.AuditDate<=''30 September 2015''
para fechas
Prueba esto:
select Date,TotalAllowance from Calculation where EmployeeId=1
and [Date] between ''2011/02/25'' and ''2011/02/27''
Los valores de fecha deben escribirse como cadenas.
Para garantizar la verificación de su consulta para SQL Server 2008 y superior, la Date
debe escaparse porque es una palabra reservada en versiones posteriores.
Tenga en cuenta que las fechas sin hora toman la medianoche como valores predeterminados, por lo que es posible que no tenga el valor correcto allí.
Puedes probar este SQL
select * from employee where rec_date between ''2017-09-01'' and ''2017-09-11''
Si su fecha es de 24 horas y comienza en la mañana y termina en la noche, debe agregar 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''
Verifique a continuación. Ejemplos: Trabajar y no trabajar.
select * from tblUser Where
convert(varchar(10),CreatedDate,111) between ''2015/04/01'' and ''2016/04/01'' //--**Working**
O
select * from tblUser Where
(CAST(CreatedDate AS DATETIME) between CAST(''2015/04/01'' AS DATETIME) And CAST(''2016/4/30''AS DATETIME)) //--**Working**
O
select * from tblUser Where
(YEAR(CreatedDate) between YEAR(''2015/04/01'') And YEAR(''2016/4/30''))
//--**Working**
Y a continuación no está funcionando:
select * from tblUser Where
Convert(Varchar(10),CreatedDate,111) >= Convert(Varchar(10),''01-01-2015'',111) and Convert(Varchar(10),CreatedDate,111) <= Convert(Varchar(10),''31-12-2015'',111) //--**Not Working**
select * from tblUser Where
(Convert(Varchar(10),CreatedDate,111) between Convert(Varchar(10),''01-01-2015'',111) And Convert(Varchar(10),''31-12-2015'',111)) //--**Not Working**
Yo iria por
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= ''2011/02/25'' and Date < DATEADD(d, 1, ''2011/02/27'')
La lógica es que >=
incluye la fecha de inicio completa y <
excluye la fecha de finalización, por lo que agregamos una unidad a la fecha de finalización. Esto se puede adaptar durante meses, por ejemplo:
select Date, ... from ...
where Date >= $start_month_day_1 and Date < DATEADD(m, 1, $end_month_day_1)
es mejor escribir de esta manera:
CREATE PROCEDURE dbo.Get_Data_By_Dates
(
@EmployeeId INT = 1,
@Start_Date DATE,
@End_Date Date
)
AS
Select * FROM Calculation
where EmployeeId=@EmployeeId AND Test_Date BETWEEN @Start_Date AND @End_Date
RETURN
podemos usar entre para mostrar datos de dos fechas, pero esto buscará los datos completos y los compararemos, lo que hará que nuestro proceso sea lento para datos enormes, así que sugiero que todos usen datediff
qry = "SELECT * FROM [calender] WHERE datediff(day,''" & dt & "'',[date])>=0 and datediff(day,''" & dt2 & "'',[date])<=0 "
aquí el calendario es la tabla, dt como la variable de fecha de inicio y dt2 es la variable de fecha de finalización.
SELECT Date, TotalAllowance
FROM Calculation
WHERE EmployeeId = 1
AND Date BETWEEN to_date(''2011/02/25'',''yyyy-mm-dd'')
AND to_date (''2011/02/27'',''yyyy-mm-dd'');
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''))
Aquí, primero agregue un día a la fecha de finalización actual, será 2011-02-28 00:00:00
, luego restará un segundo para hacer la fecha de finalización 2011-02-27 23:59:59
. Al hacer esto, puede obtener todas las fechas entre los intervalos dados.
output:
2011/02/25
2011/02/26
2011/02/27
select * from test
where CAST(AddTime as datetime) between ''2013/4/4'' and ''2014/4/4''
- si el tipo de datos es diferente
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and convert(varchar(10),Date,111) between ''2011/02/25'' and ''2011/02/27''