2

Oracleでは、週番号を指定して週の最初の日を取得する簡単な方法はありますか?

たとえば、今日の日付は 2012 年 12 月 4 日です。私が実行した場合: select to_char(sysdate,'WW') from dual; 週番号として 49 を返します。

私がやりたいことは、どうにかして 12/2/2012 を最初の日として返すことです...与えられた週 49 (日曜日を週の最初の日と仮定)。

何か案は?助けてくれてありがとう!

4

6 に答える 6

7

これを試して:

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
于 2012-12-04T16:10:34.493 に答える
4

これを試して、

select 
  next_day(trunc(to_date(in_year,'yyyy'),'yyyy') -1,'Mon') + (7 * (in_week - 1)) 
from dual;
于 2014-07-09T09:17:21.877 に答える
3

週番号だけでなく日付がある場合は、これを試すことができます:

  • 次のコマンドを使用して、日付の曜日番号を取得します。to_char(theDate, 'D')
  • 日付プラス 1 からその数を引くと、その週の日曜日が得られます。
  • 7 を追加すると、週の終わりの日付 (土曜日) が得られます。

このような:

SELECT theDate - to_char(theDate, 'D') + 1 as BeginOfWeek, 
       theDate,
       theDate - to_char(theDate, 'D') + 7 as EndOfWeek
FROM TableName
于 2013-03-12T19:08:32.247 に答える
1

質問にはまだコメントできないので、別の質問を追加します。しかし、これは@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 年以上にまたがっているため、年も確認する必要があります。

于 2013-09-14T14:05:08.847 に答える
0

@Justinが使用したtrunc関数を使用すると、これがあなたが望むものだと思います:

select trunc(to_date('2012-01-01', 'YYYY-MM-DD') + (49 - 1) * 7, 'WW') from dual;
于 2012-12-04T15:53:52.110 に答える
0

私はこれをやってしまった:

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;
于 2016-09-08T08:25:51.523 に答える