Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de fechas tipo date con BETWEEN (https://www.clubdelphi.com/foros/showthread.php?t=92333)

Unkger 03-10-2017 03:17:18

Consulta de fechas tipo date con BETWEEN
 
Hola, tengo una base de datos con lo siguiente:

Código SQL [-]
create table pagos(
fecha date
)

Código SQL [-]
insert into pagos values('2017-01-08')
insert into pagos values('2017-11-08')
insert into pagos values('2016-05-08')
insert into pagos values('2017-03-09')

Quiero hacer una consulta que me muestre las fechas desde el '2017-01-08' hasta '2017-11-08'
He hecho esto:

Código SQL [-]
declare @FechaInicio as date ='2017/01/08'
declare @FechaFin as date ='2017/11/08'
select fecha from pagos where fecha between @FechaInicial AND @FechaFin

Pero me muestra el mes 09 y solo lo quiero del 08

Código SQL [-]
2017-01-08
2017-11-08
2017-03-09

¿Alguna forma?

ecfisa 03-10-2017 04:29:39

Hola.

No se con que RDBMS estas trabajando, pareciera MySQL y no lo he usado, pero supongo que podrías intentar algo similar a esto:
Código SQL [-]
SELECT FECHA
FROM PAGOS
WHERE EXTRACT(MONTH FROM FECHA) > @FECHAINICIO
  AND EXTRACT(MONTH FROM FECHA) < @FECHAFIN

Saludos :)

lbidi 03-10-2017 15:16:17

Cita:

Empezado por Unkger (Mensaje 521448)
Hola, tengo una base de datos con lo siguiente:

Código SQL [-]
create table pagos(
fecha date
)

Código SQL [-]
insert into pagos values('2017-01-08')
insert into pagos values('2017-11-08')
insert into pagos values('2016-05-08')
insert into pagos values('2017-03-09')

Quiero hacer una consulta que me muestre las fechas desde el '2017-01-08' hasta '2017-11-08'
He hecho esto:

Código SQL [-]
declare @FechaInicio as date ='2017/01/08'
declare @FechaFin as date ='2017/11/08'
select fecha from pagos where fecha between @FechaInicial AND @FechaFin

Pero me muestra el mes 09 y solo lo quiero del 08

Código SQL [-]
2017-01-08
2017-11-08
2017-03-09

¿Alguna forma?


Hola puede ser porque defines la variable como FechaInicio y luego consultas por FechaInicial ???

Saludos

movorack 04-10-2017 00:25:37

Si es MS SQL Server, usa convert tanto para ingresar los datos a la tabla como para consultarlos.

Unkger 04-10-2017 00:47:05

Cita:

Empezado por ecfisa (Mensaje 521449)
Hola.

No se con que RDBMS estas trabajando, pareciera MySQL y no lo he usado, pero supongo que podrías intentar algo similar a esto:
Código SQL [-]
SELECT FECHA
FROM PAGOS
WHERE EXTRACT(MONTH FROM FECHA) > @FECHAINICIO
  AND EXTRACT(MONTH FROM FECHA) < @FECHAFIN

Saludos :)

Estoy usando SQL Server 2016, ese código me marca error cerca del 'FROM', aunque ya lo intente con estas otras formas no me muestra nada:

Código SQL [-]
select fecha from pagos
where datepart(month, fecha) > '20170801' and datepart(month, fecha) < '20170811'

Código SQL [-]
select fecha from pagos
where datepart(month, fecha) between '20170108' and '20171108'

Código SQL [-]
select fecha from pagos
where month(fecha) between '20170108' and '20171108'

ecfisa 04-10-2017 03:56:08

Cita:

Empezado por Unkger (Mensaje 521485)
Estoy usando SQL Server 2016...

Infiero que el problema se te presenta por que la función DATEPART, de modo similar a la función MONTH, devuelven un valor de tipo INT.
Por lo que creo que tendrías que realizar la comparación usando un valor del mismo tipo o, de otro modo, usar alguna de las funciones de conversión que te ofrece Transact-SQL.

Saludos :)

Neftali [Germán.Estévez] 04-10-2017 12:14:13

Aparte de lo comentado por los compañeros, recomendaría que para hacer pruebas, utilices siempre días por encima del 12.

Código SQL [-]
insert into pagos values('2017-01-08') 
insert into pagos values('2017-11-08') 
insert into pagos values('2016-05-08') 
insert into pagos values('2017-03-09')

insert into pagos values('2017-03-20')
insert into pagos values('2017-12-30')

Es una forma de detectar errores con los formatos (yyyy-dd-mm o yyyy-mm-dd). Utilizando días por encima del 12 estás seguro de que el formato es el corecto, ya que si no lo es obtendrás un error.

ElDioni 04-10-2017 13:37:06

¿no será por las barras y los guiones?

Código:

insert into pagos values('2017-03-09')
...
declare @FechaInicio as date ='2017/01/08'


movorack 04-10-2017 19:22:11

Cita:

Empezado por ElDioni (Mensaje 521507)
¿no será por las barras y los guiones?

Código:

insert into pagos values('2017-03-09')
...
declare @FechaInicio as date ='2017/01/08'


Por eso le dije que usara convert. Puede que al ingresarlos con guiones la fecha que el motor interprete sea una diferente a la que el pretende ingresar. Lo mismo al consultarlo con las barras

Código SQL [-]
--Convert datetime style 103: dd/mm/yyyy
insert into pagos values(CONVERT(DATETIME, '01/08/2017', 103))
insert into pagos values(CONVERT(DATETIME, '11/08/2017', 103))
insert into pagos values(CONVERT(DATETIME, '05/08/2016', 103))
insert into pagos values(CONVERT(DATETIME, '03/09/2017', 103))


declare @FechaInicio as date = CONVERT(DATETIME, '01/08/2017', 103)
declare @FechaFin as date = CONVERT(DATETIME, '11/08/2017', 103)
select fecha from pagos where fecha between @FechaInicio AND @FechaFin


La franja horaria es GMT +2. Ahora son las 18:45:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi