Für Ihre Anforderung müssen Sie die Kombination aus IW
verwenden und WW
Format. Sie könnten sie mit einem CASE kombinieren Ausdruck.
Wenn Sie die Liste der Daten für das ganze Jahr erstellen möchten, können Sie Zeilengenerator Methode.
SQL> WITH sample_data AS(
2 SELECT DATE '2015-12-28' + LEVEL -1 dt FROM dual
3 CONNECT BY LEVEL <= 15
4 )
5 -- end of sample_data mimicking real table
6 SELECT dt,
7 TO_CHAR(dt, 'DY') DAY,
8 NVL(
9 CASE
10 WHEN dt < DATE '2016-01-01'
11 THEN TO_CHAR(dt, 'IW')
12 WHEN dt >= next_day(TRUNC(DATE '2016-01-01', 'YYYY') - 1, 'Monday')
13 THEN TO_CHAR(dt +7, 'IW')
14 END, '01') week_number
15 FROM sample_data;
DT DAY WEEK_NUMBER
---------- --- -----------
2015-12-28 MON 53
2015-12-29 TUE 53
2015-12-30 WED 53
2015-12-31 THU 53
2016-01-01 FRI 01
2016-01-02 SAT 01
2016-01-03 SUN 01
2016-01-04 MON 02
2016-01-05 TUE 02
2016-01-06 WED 02
2016-01-07 THU 02
2016-01-08 FRI 02
2016-01-09 SAT 02
2016-01-10 SUN 02
2016-01-11 MON 03
15 rows selected.
HINWEIS:
Der Wert 15
um 15 Zeilen zu generieren, und die Daten sind oben nur zur Demonstration mit der WITH-Klausel fest codiert, da OP den Testfall nicht mit Anweisungen zum Erstellen und Einfügen versehen hat. In Wirklichkeit müssen Sie Ihre Tabellen- und Spaltennamen verwenden.