Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Querys entre Fechas (https://www.clubdelphi.com/foros/showthread.php?t=64318)

tebre 26-03-2009 19:31:19

Querys entre Fechas
 
hola. antes de preguntar siempre busco en el foro ahora me tope con hacer consultas entre fechas y me tope con las siguientes respuestas de como se pueden hacer
Código SQL [-]where Year(Fecha) = 2009 and Month(Fecha) in (1, 2, 3)

Código SQL [-]
where Convert(char(8),Fecha,112) between '20090301' and '20090303' yo pensaba hacerlo de la sigueinte manera...tener 2 label uno que me guardela fecha de inicio y otra la fecha de fin que se seleccione para hacer la consulta quesera seleccionada de dos datetimepicker. el problema radica que por ejemplo si quero aplicar la segunda opcion que encontrecomo cambio 12/05/2009 a '20090512' para que funcione... si alguien me pudiera explicar como funcionan las dos sentencias SQL..:( gracias...

ContraVeneno 26-03-2009 19:53:16

Si utilizas parámetros, no tendrías que hacer ninguna conversión y solo necesitarías dos DateTimepickers:

Código Delphi [-]
...
 SQL.Add('Where Fecha between :FechaInicio and :FechaFin');
...
 parameters.parambyname('FechaInicio').Value := UnDateTimepIcker.Date; //datetime
 parameters.parambyname('FechaFin').Value := OtroDateTimepIcker.Date;


Pero, si todavía quieres convertir la fecha a cadena, puedes utilizar la función "FormatDateTime":

Código Delphi [-]
 ...
 SQL.Add('Where Convert(char(8), Fecha, 112) between '+QUotedStr(FormatDateTime('yyyymmdd', UnDateTimePicker.Date)));
 SQL.Add(' and '+QUotedStr(FormatDateTime('yyyymmdd', OtroDateTimePicker.Date)));
...

tebre 26-03-2009 19:56:25

parametros
 
hola contraveneno gracias por responder tu siempre tan oportuno...

y si cuando guardo los datos lo guardo por medio de parametros pero me guarda la fecha seguida con la hora...la pregunta es si utilizo este codigo asi como lo tienes no me causara problemas con la hora que tengo almacenado en el campo???

ContraVeneno 26-03-2009 20:07:29

con la primer opción sí hay que tener cuidado con la hora. Pero bastaría con ponerle la hora 00:00 a un datetimpicker y la hora 23:59 al otro y con eso ya no habría problema.

Con la conversión a cadena utilizando CONVERT, tampoco hay problema, ya que el estilo 112 de SQL Server no considera la hora.

Con las funciones Year y Month de SQL Server tampoco importa la hora:

Código Delphi [-]
uses DateUtils;
...
 SQL.Add('where Year(Fecha) = :Year and Month(Fecha) between :MesInicio and :mesFin');
Parameters.ParamByName('Year').Value := YearOf(UnDateTimePicker.Date);
Parameters.ParamByName('MesInicio').Value := MonthOf(UnDateTimePicker.Date);
Parameters.ParamByName('mesFin').Value := MonthOf(UnDateTimePicker.Date);
El problema con esta forma es cuando se queire consultar de diciembre de un año a un mes de otro año...

como verás, hay muuuuuuuuuchas opciones.

yo prefiero esta:
Código Delphi [-]
...
 SQL.Add('Where Fecha between :FechaInicio and :FechaFin');
...
 parameters.parambyname('FechaInicio').Value := UnDateTimepIcker.Date; 
parameters.parambyname('FechaFin').Value := OtroDateTimepIcker.Date;
poniendo la hora 00:00 a un datetimpicker y la hora 23:59 al otro

tebre 26-03-2009 20:31:43

probando.......

Código Delphi [-]
 
procedure TUpruebaaa.Button1Click(Sender: TObject);
begin
 With Datos.QryPrueba do begin
  If active then close;
     SQL.Clear;
     SQL.Add('SELECT FolioSolicitud,ClaveDireccion ');
     SQL.Add('FROM Solicitud');
     SQL.Add('Where FechaSolicitud between :Fechainicio and :FechaFin');
     parameters.parambyname('Fechainicio').Value := DateTimepIcker1.Date;
     parameters.parambyname('FechaFin').Value := DateTimepIcker2.Date;
     ExecSQL;
  end;
end;

quiero sacar los folio entre fechar por ejemplo
fechasolicitud:
01/02/2009 13:47:00
24/02/2009 13:47:00
24/03/2009 13:47:00
24/03/2009 13:47:00
24/03/2009 13:47:00

que me saque 01/02/2009 y 24/02/2009

datetimePicker1:
propiedad time 00:00

datetimepicker2:
propiedad time 23:59

ayudaaaa..no me muestra nada

ContraVeneno 26-03-2009 20:36:22

Las instrucciones de Selección, se ejecutan con "Open"

las instrucciones para modificar, insertar o eliminar, se ejecutan con "ExecSQL".

:D

tebre 26-03-2009 20:40:05

jejejeje que verguenza ya esta gracias..contraveneno asi estoy aprendiendo


La franja horaria es GMT +2. Ahora son las 07:23:09.

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