DUDA CON EL NVL

jefazo81
16 de Diciembre del 2005
Tengo una duda con el nvl

jefazo81
16 de Diciembre del 2005
Hola buenas que me habia colado.
Os comento lo que me ocurre tengo una tabla con 4 registros que tienen la fecha y la hora de este estilo:

FRHR_CO_FRANJA: 1
FRHR_HO_INICIO:01/01/2003 00:00:00
FRHR_HO_FIN:01/01/2003 06:00:00


FRHR_CO_FRANJA: 2
FRHR_HO_INICIO:01/01/2003 06:00:00
FRHR_HO_FIN:01/01/2003 12:00:00

FRHR_CO_FRANJA: 3
FRHR_HO_INICIO:01/01/2003 12:00:00
FRHR_HO_FIN:01/01/2003 18:00:00

FRHR_CO_FRANJA: 4
FRHR_HO_INICIO:01/01/2003 18:00:00
FRHR_HO_FIN:01/01/2003 00:00:00


Queremos hacer una query para que nos devuelva la franja horaria en la que nos encontramos.El problema lo tenemos cuando es la franja de 18:00 a 0:00 que entiende que es fecha inicio menor que la de fin , hemos intentado solucionarlo con esta query, lo hemos logrado si las horas de las franjas fuesen constantes pero son administrables y no sabemos como poder hacerlo de forma que no haya que cambiar la query cada vez que se administre.

SELECT NVL(sum(FRHR_CO_FRANJA) ,4)
FROM ONFRHRMO
WHERE TO_CHAR(SYSDATE, 'HH24:MI:SS') BETWEEN TO_CHAR(FRHR_HO_INICIO, 'HH24:MI:SS') AND TO_CHAR(FRHR_HO_FINAL, 'HH24:MI:SS')


Gracias y un saludo.

scuincle
16 de Diciembre del 2005
el error esta en la interpretacion de las fechas.

para oracle una fecha con hora 00:00:00 es el primer segundo del dia y el ultimo es 23:59:59

haz este select

select greatest(to_date('2005-10-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),
to_date('2005-10-01 18:00:00','yyyy-mm-dd hh24:mi:ss'))
from dual

y vez que la mayor fecha no es '2005-10-01 00:00:00' sino '2005-10-01 18:00:00'.

cambia el dato de la fecha.

ray
16 de Diciembre del 2005
recuerda que debes de alterar tu sesion con alter session set nls_date_format='DD-MM-YYYY' y checas tu query, para que sea cosntante en el cliente agrega en el regedit en oracle y en el home la clave nls_date_format con 'dd-mm-yyyy' para que formatee las fechas