Oracleでは、週番号を指定して週の最初の日を取得する簡単な方法はありますか?
たとえば、今日の日付は 2012 年 12 月 4 日です。私が実行した場合: select to_char(sysdate,'WW') from dual; 週番号として 49 を返します。
私がやりたいことは、どうにかして 12/2/2012 を最初の日として返すことです...与えられた週 49 (日曜日を週の最初の日と仮定)。
何か案は?助けてくれてありがとう!
これを試して:
select next_day(max(d), 'sun') requested_sun
from (select to_date('01-01-2012', 'dd-mm-yyyy') + (rownum-1) d from dual connect by level <= 366)
where to_char(d, 'ww') = 49-1;
必要に応じて、年to_date('01-01-2012'
と週番号 149-1
を設定するだけです。
2008年の第49週の日曜日?
SQL> select next_day(max(d), 'sun') requested_sun
2 from (select to_date('01-01-2008', 'dd-mm-yyyy') + (rownum-1) d from dual connect by level <= 366)
3 where to_char(d, 'ww') = 49-1;
REQUESTED
---------
07-DEC-08
そして2012年
SQL> select next_day(max(d), 'sun') requested_sun
2 from (select to_date('01-01-2012', 'dd-mm-yyyy') + (rownum-1) d from dual connect by level <= 366)
3 where to_char(d, 'ww') = 49-1;
REQUESTED
---------
02-DEC-12
これを試して、
select
next_day(trunc(to_date(in_year,'yyyy'),'yyyy') -1,'Mon') + (7 * (in_week - 1))
from dual;
週番号だけでなく日付がある場合は、これを試すことができます:
to_char(theDate, 'D')
このような:
SELECT theDate - to_char(theDate, 'D') + 1 as BeginOfWeek,
theDate,
theDate - to_char(theDate, 'D') + 7 as EndOfWeek
FROM TableName
質問にはまだコメントできないので、別の質問を追加します。しかし、これは@Dazzalsの回答に基づいています。彼のソリューションは、1 週間目と ISO 週間では機能しません。また、週の最初の日が日曜日でない場合は機能しません。これは NLS_SETTINGS で制御できます。
これは次のことを行います:
SELECT MIN(D)
FROM (SELECT TO_DATE('01-01-2013', 'dd-mm-yyyy') + (ROWNUM-10) D, ROWNUM R
FROM DUAL
CONNECT BY LEVEL <= 376)
WHERE TO_CHAR(D,'IYYYIW') = '201301'
1 年以上にまたがっているため、年も確認する必要があります。
@Justinが使用したtrunc関数を使用すると、これがあなたが望むものだと思います:
select trunc(to_date('2012-01-01', 'YYYY-MM-DD') + (49 - 1) * 7, 'WW') from dual;
私はこれをやってしまった:
function getFirstDayOfWeek(y in binary_integer, w in binary_integer) return date
is
td date;
begin
td:=TO_DATE(TO_CHAR(y)||'0101', 'YYYYMMDD');
for c in 0..52
loop
if TO_NUMBER(TO_CHAR(td, 'IW'))=w then
return TRUNC(td, 'IW');
end if;
td:=td+7;
end loop;
return null;
end;