Oracle
 sql >> Base de données >  >> RDS >> Oracle

Semaine de travail SQL dans Oracle

Pour votre besoin, vous devez utiliser une combinaison de IW et WW format. Vous pouvez les combiner à l'aide d'un CASE expression.

Si vous souhaitez générer la liste des dates pour l'année entière, vous pouvez utiliser le générateur de lignes méthode.

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.

REMARQUE :

La valeur 15 pour générer 15 lignes et les dates sont codées en dur ci-dessus uniquement pour la démonstration à l'aide de la clause WITH car OP n'a pas fourni au cas de test les instructions de création et d'insertion. En réalité, vous devez utiliser vos noms de table et de colonne.