2013-02-01 4 views
0

가장 가까운 7AM 날짜를 알아야합니다. 그것은 오늘 (00-07AM 인 경우) 또는 tomorow (07 AM-12PM 인 경우) 일 수 있습니다. if 성명에는 "인라인"이 가능합니까?신탁 날짜 받기

+0

이 no에 대해 case 문을 사용할 수 있습니까? – TechDo

+0

{}에서 (param1, param2, param3, {trunc (sysdate) +7/24}) schema.api_func.func()를 사용하여 간단한 문장을 사용하고 싶습니다. 가능하면 –

답변

1

잘라 내기 전에 날짜를 조정할 수 있습니다. 실제 sysdate 대신에 가짜 sdate 값 :이 7시 0분 0초 이상이라면 내일이 7시 0분 0초 전에, 그리고 자정 경우

alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS'; 

with t as (
    select to_date('01/02/2013 00:00:00') as sdate from dual 
    union all select to_date('01/02/2013 06:59:59') from dual 
    union all select to_date('01/02/2013 07:00:00') from dual 
    union all select to_date('01/02/2013 07:00:01') from dual 
    union all select to_date('01/02/2013 23:59:59') from dual 
    union all select to_date('02/02/2013 00:00:00') from dual 
) 
select sdate, 
    trunc(sdate + interval '17' hour) + interval '7' hour 
from t 
order by sdate; 

SDATE    TRUNC(SDATE+INTERVA 
------------------- ------------------- 
01/02/2013 00:00:00 01/02/2013 07:00:00 
01/02/2013 06:59:59 01/02/2013 07:00:00 
01/02/2013 07:00:00 02/02/2013 07:00:00 
01/02/2013 07:00:01 02/02/2013 07:00:00 
01/02/2013 23:59:59 02/02/2013 07:00:00 
02/02/2013 00:00:00 02/02/2013 07:00:00 

그래서 trunc(sysdate + interval '17' hour) 오늘 당신에게 자정을 줄 것이다; + interval '7' hour은 첫 번째로 해결 된 날 중 07:00:00이됩니다.

간격 대신 + 17/24+ 7/24을 사용할 수 있지만 나중에 간격을 이해하는 것이 더 쉽다고 생각합니다.

정확히 07:00:00으로 실행하면 내일으로 계산됩니다. 그것이 틀린 경우에는 초 단위로 조정할 수 있습니다.

with t as (
    select to_date('01/02/2013 00:00:00') as sdate from dual 
    union all select to_date('01/02/2013 06:59:59') from dual 
    union all select to_date('01/02/2013 07:00:00') from dual 
    union all select to_date('01/02/2013 07:00:01') from dual 
    union all select to_date('01/02/2013 23:59:59') from dual 
    union all select to_date('02/02/2013 00:00:00') from dual 
) 
select sdate, 
    trunc(sdate + interval '16:59:59' hour to second) + interval '7' hour 
from t 
order by sdate; 

SDATE    TRUNC(SDATE+INTERVA 
------------------- ------------------- 
01/02/2013 00:00:00 01/02/2013 07:00:00 
01/02/2013 06:59:59 01/02/2013 07:00:00 
01/02/2013 07:00:00 01/02/2013 07:00:00 
01/02/2013 07:00:01 02/02/2013 07:00:00 
01/02/2013 23:59:59 02/02/2013 07:00:00 
02/02/2013 00:00:00 02/02/2013 07:00:00 
+0

trunc (sdate + interval '17'hour) + interval '7'hour 이 코드는 호환 가능합니까? –

+0

에서 감사합니다. (= 10g에서 실행됩니까?) –

+0

@ondrotadanai - 적어도 9i로 돌아갑니다. 간격이 추가되었을 때 확실하지 않습니다. –

0

시간이 < 07:00 또는 내일이면 오늘 알려 드리겠습니다.

trunc(sysdate+17/24) 

trunc는 날짜의 시간 부분을 제거합니다. 17/24는 현재 시간에 17 시간을 더합니다.

+0

O, 당신은 이미 이것을 알고 있습니다. 그래서 지금 나는 당신이 실제로 무엇을 요구하고 있는지 혼란 스럽습니다. – Rene

+0

답변을 주셔서 감사합니다 그래서 내가 알고 싶어도 시간 : trunc (sysdate + 17/24) +7/24 사실? 덕분에 –