2016-08-31 2 views
0

Я запускаю весь запрос, и все работает нормально, до тех пор, пока в конце я не получу ошибку (заголовок), и результат должен быть похож на изображение excel ниже. Я пробовал хранить часы как char, num и date, однако я все еще получаю ошибку. Любая помощь будет оценена по достоинству. Пожалуйста, не стесняйтесь задавать вопросы и проверять код в своем инструменте. БлагодаряOracle SQL - Час должен быть между 0 и 23 ошибкой

Output_sample

with ht as( 
    select labno, birthdt, spectype, 
--to_char(
    ((dtrecv - dtcoll) 
    + (to_date(nvl(tmrecv, '0000'), 'hh24mi') 
    - to_date(nvl(tmcoll, '0000'), 'hh24mi')) 
    ) * 24 
--, 'hh24:mi') 
    as hours 
    from azmsds.sample_demog_view 
    where tmrecv is not null and tmcoll is not null and dtrecv is not null and dtcoll is not null 
), 


    secondQuery AS (
    select 
     ht.hours,  
     extract(year from ht.birthdt) as "YEAR", 
     extract (month from ht.birthdt) as "MONTH", 
     count(distinct ht.labno) as "initialDbsReceiptCount<1", 
    '~' AS EOL 
    from ht 
    where 1=1 
and ht.hours is not null  
     --and month not null 
     AND ht.birthdt >= '01-JAN-12' 
    -- and hours <= 23 
     and ht.spectype in (1,5,7) 
    --and hours > 23 
    group by extract(year from ht.birthdt), extract (month from ht.birthdt), ht.hours 
    order by extract(year from ht.birthdt) desc 
), 
    ThirdQuery AS (
    SELECT 
     sq.year, 
     sq.month, 
     sq."initialDbsReceiptCount<1", 
     sq.eol 
    FROM secondQuery sq 
    WHERE 1=1 
    --AND sq.hours <= 24 
) 
select * from ThirdQuery 

ответ

0

Кажется мне, у вас есть какие-то неправильные данные в iether tmrecv ИЛИ tmcoll ...

если вы

select to_date('2500', 'hh24mi') from dual; 

Вы получите эту ошибку.

Так что я хотел бы начать с попробовав ниже выбирает, чтобы сузить, где проблема

select to_date(nvl(tmrecv, '0000'), 'hh24mi') as hours 
from azmsds.sample_demog_view 
where tmrecv is not null and tmcoll is not null and dtrecv is not null and dtcoll is not null 

select to_date(nvl(tmcoll, '0000'), 'hh24mi')) as hours 
    from azmsds.sample_demog_view 
    where tmrecv is not null and tmcoll is not null and dtrecv is not null and dtcoll is not null 

Один или другой из указанных выше даст вам ошибку, то вы можете проверить данные из этих полей, чтобы найти данные, которые вызывают ошибку.

0

По-видимому, у вас есть недопустимые значения времени. Это должно помочь выявить плохие.

select * from azmsds.sample_demog_view 
where 
     tmrecv not like '[0-2][0-9][0-5][0-9]' 
    or tmcoll not like '[0-2][0-9][0-5][0-9]' 
    or not tmrecv between '0000' and '2359' 
    or not tmcoll between '0000' and '2359' 
Смежные вопросы