最も近い午前7時の日付を見つける必要があります。今日(00-07AMの場合)または明日(07 AM-12PMの場合)になります。if
ステートメントではなく、この「インライン」を実行できるものはありますか?
2 に答える
1
切り捨てる前に日付を調整できます。sdate
real の代わりにいくつかの偽の値を使用しsysdate
ます。
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)
、07:00:00 より前の場合は今日の真夜中、07:00:00 以降の場合は明日の真夜中となります。次に+ interval '7' hour
、最初に解決された日の 07:00:00 にします。
+ 17/24
間隔の代わりにandを使用することもできますが+ 7/24
、間隔の方が後で誰かが理解しやすいと思います。
これは、正確に 07:00:00 に実行した場合、それが明日と見なされることを前提としています。それが間違っている場合は、1 秒単位で調整できます。
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
于 2013-02-01T13:00:45.663 に答える
0
これにより、時間が < 07:00 の場合は今日、それ以外の場合は明日になります。
trunc(sysdate+17/24)
trunc は、日付の時刻部分を削除します。17/24 は、現在の時刻に 17 時間を追加します。
于 2013-02-01T13:00:11.197 に答える