sql >> Database >  >> RDS >> Oracle

SQL-werkweek in Oracle

Voor uw vereiste moet u een combinatie van IW . gebruiken en WW formaat. Je zou ze kunnen combineren met een CASE uitdrukking.

Als u de lijst met datums voor het hele jaar wilt genereren, kunt u de rijgenerator 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.

OPMERKING:

De waarde 15 om 15 rijen te genereren en de datums zijn hierboven hard gecodeerd, alleen voor demonstratie met behulp van de WITH-component, aangezien OP de testcase niet heeft voorzien van instructies voor maken en invoegen. In werkelijkheid moet u uw tabel- en kolomnamen gebruiken.



  1. Type bytea casten om de precisie te verdubbelen

  2. MySQL:kolommen ophalen op waardeprioriteiten

  3. wijzig int om te zweven (mysql)

  4. Problemen oplossen:MySQL/MariaDB-fout #1044 Е Toegang geweigerd voor gebruiker