Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Semana de trabalho SQL no Oracle


Para sua necessidade, você precisa usar a combinação de IW e WW formato. Você pode combiná-los usando um CASE expressão.

Se você quiser gerar a lista de datas para o ano inteiro, use o gerador de linha método.
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.

OBSERVAÇÃO:

O valor 15 para gerar 15 linhas e as datas são codificadas acima apenas para demonstração usando a cláusula WITH, já que o OP não forneceu o caso de teste com instruções create e insert. Na realidade, você precisa usar seus nomes de tabela e coluna.