Ver Mensaje Individual
  #1  
Antiguo 28-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Reputación: 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 02:27:42.
Responder Con Cita