Ir al contenido


Foto

Concatenar campos en consulta(fecha y hora)


  • Por favor identifícate para responder
7 respuestas en este tema

#1 JandoK

JandoK

    Advanced Member

  • Moderadores
  • PipPipPip
  • 838 mensajes
  • LocationMexico

Escrito 16 julio 2009 - 01:13

Como se podrian concatenar dos campos uno tipo FECHA  y otro tipo HORA dentro de la
clausula  WHERE de una consulta ???

El detalle es este, quiero sacar en una consulta, los registros de una tabla que se generaron
en un cierto horario.
En un principio, los periodos eran HORAS de un mismo dia, por ejemplo, de las  06:00:00  a  las 14:00:00
del dia 15-07-2009 .... ahi no habia problemas,

Consulta original :


delphi
  1. Consulta.SQL.Text := 'SELECT Telefono, Domicilio, HServicio, Fecha  '+
  2.                               'FROM tslocaleshist '+
  3.                               ' WHERE  ((HServicio BETWEEN '+ QuotedStr(FormatDateTime('hh:nn:ss',DTPHoraI.Time)) +' AND ' + QuotedStr(FormatDateTime('hh:nn:ss',DTPHoraF.Time))+ ') and (Fecha = ' + QuotedStr(FormatDateTime('yyyy-mm-dd',DTPFechaI.Date))+' ) order by Fecha, HServicio';
  4.      



Pero ahora, cambiaron los horarios de trabajo, y empiezan en la noche de un dia y terminan en la mañana del dia siguiente...

como se podria hacer la consulta ???

esto fue lo primero que se me ocurrio...


delphi
  1.     Consulta.SQL.Text := 'SELECT Telefono, Domicilio, Halcon, HServicio, Fecha  FROM tslocaleshist '+
  2.                 ' WHERE  ((HServicio >= '+ QuotedStr(FormatDateTime('hh:nn:ss',DTPHoraI.Time)) +' AND Fecha >= ' +QuotedStr(FormatDateTime('yyyy-mm-dd',DTPFechaI.Date)) +') AND (HServicio <='+ QuotedStr(FormatDateTime('hh:nn:ss',DTPHoraF.Time))+ ' and Fecha <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd',DTPFechaF.Date)) + ')) order by Fecha, HServicio';



pero no funciona.. nunca se cumplen las condiciones ...

asi que lo que intento ahora es comparar con la hora y fecha  juntas

es decir algo como ....



delphi
  1.     Consulta.SQL.Text := 'SELECT Telefono, Domicilio, Halcon, HServicio, Fecha  FROM tslocaleshist '+
  2.   'WHERE (campo_fecha+campo_hora) BETWEEN fechainicio AND fechafin ';
  3. //  donde fechainicio y fechafin  estarian en formato  yyyy-mm-dd hh:nn:ss
  4. //  y la idea de concatenar los campos es que se tomen con ese mismo formato



espero me haya dado a entender...

gracias...

salu2!!!!!!!
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 julio 2009 - 01:24

Pues se me ocurre que deberí­a de utilizar parámetros:



delphi
  1. Consulta.SQL.Text := 'SELECT Telefono, Domicilio, HServicio, Fecha  '+
  2.                               'FROM tslocaleshist '+
  3.                               ' WHERE  HServicio BETWEEN :Hinicio  AND  :HFinal and Fecha = :FechaI order by Fecha, HServicio';
  4.  
  5. Consulta.ParamByname('Hinicio').Value := FormatDateTime('hh:nn:ss',DTPHoraI.Time);
  6. Consulta.ParamByName('HFinal').Value := FormatDateTime('hh:nn:ss',DTPHoraF.Time);
  7. Consulta.ParamByName('FechaI').Value := FormatDateTime('yyyy-mm-dd',DTPFechaI.Date);



Lo hice de memoria puede que haya que arreglar algo :$

Saludos.

  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 julio 2009 - 01:31

Espera, que me faltó la concatenación :p:



delphi
  1. Consulta.SQL.Text := 'SELECT Telefono, Domicilio, HServicio, Fecha  '+
  2.                               'FROM tslocaleshist '+
  3.                               ' WHERE  HServicio BETWEEN :Hinicio  AND  :HFinal order by Fecha, HServicio';
  4.  
  5. Consulta.ParamByname('Hinicio').Value := FormatDateTime('yyyy-mm-dd',DTPFechaI.Date)+' '+FormatDateTime('hh:nn:ss',DTPHoraI.Time);
  6. Consulta.ParamByName('HFinal').Value := FormatDateTime('yyyy-mm-dd',DTPFechaF.Date)+' '+FormatDateTime('hh:nn:ss',DTPHoraF.Time);



Creo que así­ va mejor :D
  • 0

#4 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 16 julio 2009 - 01:51

No funcionará algo así­  *-)??



sql
  1. SELECT Telefono, Domicilio, Halcon, HServicio, Fecha 
  2. FROM tslocaleshist WHERE (campo_fecha|''|campo_hora) BETWEEN fechaincio AND fechafin


  • 0

#5 JandoK

JandoK

    Advanced Member

  • Moderadores
  • PipPipPip
  • 838 mensajes
  • LocationMexico

Escrito 16 julio 2009 - 03:14

Espera, que me faltó la concatenación :p:



delphi
  1. Consulta.SQL.Text := 'SELECT Telefono, Domicilio, HServicio, Fecha  '+
  2.                               'FROM tslocaleshist '+
  3.                               ' WHERE  HServicio BETWEEN :Hinicio  AND  :HFinal order by Fecha, HServicio';
  4.  
  5. Consulta.ParamByname('Hinicio').Value := FormatDateTime('yyyy-mm-dd',DTPFechaI.Date)+' '+FormatDateTime('hh:nn:ss',DTPHoraI.Time);
  6. Consulta.ParamByName('HFinal').Value := FormatDateTime('yyyy-mm-dd',DTPFechaF.Date)+' '+FormatDateTime('hh:nn:ss',DTPHoraF.Time);



Creo que así­ va mejor :D


el detalle es que yo quiero concatenar los campos HServicio y Fecha, que son los campos
de la tabla con el valor dela  HORA  y Fecha, respectivamente.

y lo que tu pones para concatenar, es precisamente, los parametros o valores de comparacion ...

pero GRACIAS ...  (y) (y) (y)

salu2!!!!!!!
  • 0

#6 JandoK

JandoK

    Advanced Member

  • Moderadores
  • PipPipPip
  • 838 mensajes
  • LocationMexico

Escrito 16 julio 2009 - 03:15

No funcionará algo así­  *-)??



sql
  1. SELECT Telefono, Domicilio, Halcon, HServicio, Fecha 
  2. FROM tslocaleshist WHERE (campo_fecha|''|campo_hora) BETWEEN fechaincio AND fechafin



en estos momentos hago la prueba ....

gracias... ahorita regreso con la respuesta ...  (y) (y) :D :D

salu2!!!!!!!
  • 0

#7 JandoK

JandoK

    Advanced Member

  • Moderadores
  • PipPipPip
  • 838 mensajes
  • LocationMexico

Escrito 16 julio 2009 - 03:30

listo ...  si funciono amigo felipe con algunos ajustes...  :D :D :D

aplicando la respuesta de felipe  y  enecumene con lo de los parametros ...

el resultado quedo algo mas o menos asi... :



delphi
  1.   Consulta.SQL.Text := 'SELECT Telefono, Domicilio, Halcon, HServicio, Fecha '+
  2.                           'FROM tslocaleshist '+
  3.                           'WHERE (Fecha||' '||Hservicio) BETWEEN :fechainicio AND :fechafin ' +
  4.                           'ORDER BY Fecha, HServicio ';
  5.  
  6.   Consulta.ParamByName('fechainicio').Value := FormatDateTime('yyyy-mm-dd',DTPFechaI.Date)+' '+FormatDateTime('hh:nn:ss',DTPHoraI.Time);
  7.   Consulta.ParamByName('fechafin').Value := FormatDateTime('yyyy-mm-dd',DTPFechaF.Date)+' '+FormatDateTime('hh:nn:ss',DTPHoraF.Time);



gracias de nuevo ....

salu2!!!!!!!

  por eso me gusta DA, siempre solucionan nuestros problemas :D :D :D :D



  • 0

#8 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 16 julio 2009 - 03:33

Que bueno que lo solucionaste, es verdad se me olvido el doble || :p...


  por eso me gusta DA, siempre solucionan nuestros problemas :D :D :D :D


Que bien  (y) :D

Saludos!
  • 0




IP.Board spam blocked by CleanTalk.