Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
CAST en sentencia CASE

Hola amigos....

Estoy trabajando con Firebird 2.0 y delphi 6

Estoy tratando de ejecutar este query:
Código SQL [-]
select LPAD(a.registro_id,6,'0') as registro_id,
       LPAD(a.folio_ticket_comanda,6,'0') as ticket,
       a.registro_id as registro_id2,
       current_date  as fecha_hora_impresion,
       a.mesa_num||COALESCE(a.literal,'') as mesa,
       CASE
           when current_time>=cast('13:00:00' as time) THEN a.fecha_hora_registro
       else CAST( a.fecha_hora_registro as DATE )
       end as fecha_sin_hora,
       b.cantidad,
       b.consec,
       case b.cortesia
           when 'S' then b.precio*-1
           when 'N' then b.precio
       end as precio,
       b.comentario,
       CASE b.cortesia
          when 'S' then RTRIM( UPPER(c.prod_descripcion_corta) )||'-[CORTESIA]'
          when 'N' then RTRIM(UPPER(c.prod_descripcion_corta))
       end||' '||COALESCE(b.comentario,'') as prod_descripcion_corta,
       b.descripcion_producto,
       b.cortesia,
       UPPER((select d.alias_nombre
        from empleado d, asignacion_mesa e
        where d.empleado_id=e.empleado_id
          and e.mesa_num=a.mesa_num)) as mesero,
       f.um_descripcion_corta,
       h.descripcion as clasificacion
from comanda_maestro a,
     comanda_detalle b,
     producto c,
     unidad_medida f,
     categoria_producto g,
     clasif_categoria_producto h
where a.registro_id=b.registro_id
  and a.registro_id=:registro_id
  and b.producto_id=c.producto_id
  and c.um_id=f.um_id
  and c.categoria_id=g.categoria_id
  and g.id_clasificacion=h.id_clasificacion
order by h.descripcion

Les explico que quiero hacer: El cliente me pidio que en el ticket de una comanda, saliera impreso la hora siempre y cuando fuera mas de 1 pm (13:00:00) y que no se imprima si la hora es menor a la 1 p.m.

El problema esta aqui:

Código SQL [-]
       CASE
           when current_time>=cast('13:00:00' as time) THEN a.fecha_hora_registro
       else CAST( a.fecha_hora_registro as DATE )
       end as fecha_hora,

.... marca este error:

Código SQL [-]
Dynamic SQL Error.
SQL error code = -104.
Datatypes are not comparable in expression CASE.

Parece ser que la sentencia CASE no soporta este tipo de consultas en su estructura con la version de Firebird q estoy usando. Lo puedo solucionar creando un campo que solo almacene la fecha y el otro campo -que la tengo creado que por cierto es del tipo Timestamp- lo dejaria tal cual...y entonces lo resolveria con la sentencia case, pero en realidad quiero agotar esta opción, si no se puede usando case...pues ni modo creare el campo

Alguna otra idea de como se pudiera solucionar??.

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 28-05-2019 a las 03:27:42.
Responder Con Cita
  #2  
Antiguo 28-05-2019
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
Saludos a todos...

He probado la consulta que propones en una versión 2.1 y allí si que funciona.

Una alternativa a lo que propones podría ser convertir la hora a string en lugar del string a hora...

¿Te serviría algo como esto?

Código SQL [-]
select hora_modificacion,
       CASE
         when cast(hora_modificacion as char(13))>='13' THEN hora_modificacion
         else current_time
       end as fecha_hora
 from  tbl_albaranes_venta_cab

Saludos
Responder Con Cita
  #3  
Antiguo 28-05-2019
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Hola...

Código SQL [-]
WHEN EXTRACT(HOUR FROM CURRENT_TIME) >= 13 THEN A.FECHA_HORA_REGISTRO

Fuente: EXTRACT() - Firebird 2.0 Language Ref.
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #4  
Antiguo 29-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Ok...gracias a todos por contestar.

Probare lo que me proponen y les comento....

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #5  
Antiguo 29-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por TOPX Ver Mensaje
Hola...

Código SQL [-]
WHEN EXTRACT(HOUR FROM CURRENT_TIME) >= 13 THEN A.FECHA_HORA_REGISTRO

Fuente: EXTRACT() - Firebird 2.0 Language Ref.
-
Gracias por contestar.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #6  
Antiguo 29-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por manelb Ver Mensaje
Saludos a todos...

He probado la consulta que propones en una versión 2.1 y allí si que funciona.

Una alternativa a lo que propones podría ser convertir la hora a string en lugar del string a hora...

¿Te serviría algo como esto?

Código SQL [-]
select hora_modificacion,
       CASE
         when cast(hora_modificacion as char(13))>='13' THEN hora_modificacion
         else current_time
       end as fecha_hora
 from  tbl_albaranes_venta_cab

Saludos
Gracias por tu comentario.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #7  
Antiguo 29-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Hola que tal...

Pues puse en práctica sus propuestas:

la de TOPX
Código SQL [-]
SELECT CURRENT_TIME,
       a.fecha_hora_registro,
       cast( a.fecha_hora_registro as date) as fecha2,
       CASE when EXTRACT(HOUR FROM CURRENT_TIME) >=13
            then a.fecha_hora_registro
       ELSE EXTRACT(day FROM a.fecha_hora_registro)||'/'||EXTRACT(month from a.fecha_hora_registro)||'/'||EXTRACT(year from a.fecha_hora_registro)
       END
from comanda_maestro a

Este QUERY funcionó, descomponiendo la fecha usando EXTRACT y concatenandola despues....

La propuesta de manelb

Código SQL [-]
SELECT CURRENT_TIME,
       a.fecha_hora_registro,
       cast( a.fecha_hora_registro as date) as fecha2,
       CASE
            when CAST(A.fecha_hora_registro AS CHAR(13)) >=13
            then a.fecha_hora_registro
       ELSE CURRENT_TIME
       END
from comanda_maestro a

No me fucionó marcó este error:
Código SQL [-]
Dynamic SQL Error.
SQL error code = -104.
Datatypes are not comparable in expression CASE.

De todas formas les agradezco su apoyo y orientación....

Muchas gracias...todavía estoy valorando mas opciones. Luego les comentaré como lo resolví.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 29-05-2019 a las 03:12:34.
Responder Con Cita
  #8  
Antiguo 29-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Pues quedó asi:

Código SQL [-]
select LPAD(a.registro_id,6,'0') as registro_id,
       LPAD(a.folio_ticket_comanda,6,'0') as ticket,
       a.registro_id as registro_id2,
       current_date  as fecha_hora_impresion,
       a.mesa_num||COALESCE(a.literal,'') as mesa,
       CASE
           when EXTRACT(HOUR from current_time) >=13 then SUBSTR(a.fecha_hora_registro,1,19)
       ELSE EXTRACT(year FROM a.fecha_hora_registro)||'/'||
            LPAD(EXTRACT(month from a.fecha_hora_registro),2,0)||'/'||
            LPAD(EXTRACT(day from a.fecha_hora_registro),2,0)
       END as fecha_comanda,
       b.cantidad,
       b.consec,
       case b.cortesia
           when 'S' then b.precio*-1
           when 'N' then b.precio
       end as precio,
       b.comentario,
       CASE b.cortesia
          when 'S' then RTRIM( UPPER(c.prod_descripcion_corta) )||'-[CORTESIA]'
          when 'N' then RTRIM(UPPER(c.prod_descripcion_corta))
       end||' '||COALESCE(b.comentario,'') as prod_descripcion_corta,
       b.descripcion_producto,
       b.cortesia,
       UPPER((select d.alias_nombre
        from empleado d, asignacion_mesa e
        where d.empleado_id=e.empleado_id
          and e.mesa_num=a.mesa_num)) as mesero,
       f.um_descripcion_corta,
       h.descripcion as clasificacion
from comanda_maestro a,
     comanda_detalle b,
     producto c,
     unidad_medida f,
     categoria_producto g,
     clasif_categoria_producto h
where a.registro_id=b.registro_id
  and a.registro_id=:registro_id
  and b.producto_id=c.producto_id
  and c.um_id=f.um_id
  and c.categoria_id=g.categoria_id
  and g.id_clasificacion=h.id_clasificacion
order by h.descripcion

La parte azul es como quedó la consulta. Gracias a todos por su tiempo y sus aportaciones.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sentencia Case... error Incompatible types BlueSteel Varios 5 05-10-2010 22:53:30
Sentencia CASE en SQL Server juanelo MS SQL Server 13 26-02-2010 15:19:47
Es posible un Case anidado en Sentencia SQL ? gluglu SQL 3 25-09-2007 21:43:15
sentencia case... patorecalde Oracle 2 07-08-2007 21:55:57
Cast a un Blob Triton Firebird e Interbase 0 20-02-2004 10:49:53


La franja horaria es GMT +2. Ahora son las 15:43:25.


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
Copyright 1996-2007 Club Delphi