За вашите изисквания трябва да използвате комбинация от IW
и WW
формат. Можете да ги комбинирате с помощта на КАЛЪФ израз.
Ако искате да генерирате списък с дати за цялата година, можете да използвате генератор на редове метод.
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.
ЗАБЕЛЕЖКА:
Стойността 15
за генериране на 15 реда и датите са твърдо кодирани по-горе само за демонстрация с помощта на клаузата WITH, тъй като OP не предостави тестовия случай с изрази за създаване и вмъкване. В действителност трябва да използвате имената на вашите таблици и колони.