sql >> Databasteknik >  >> RDS >> Oracle

SQL arbetsvecka i Oracle

För ditt krav måste du använda en kombination av IW och WW formatera. Du kan kombinera dem med ett CASE uttryck.

Om du vill skapa en lista över datum för hela året kan du använda radgenerator metod.

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.

OBS:

Värdet 15 för att generera 15 rader och datumen är hårdkodade ovan bara för demonstration med användning av WITH-satsen eftersom OP inte försåg testfallet med skapa och infoga-satser. I verkligheten måste du använda dina tabell- och kolumnnamn.



  1. Skapa en pivottabell med PostgreSQL

  2. Utl filnamnsändring misslyckades

  3. Lägg till främmande nyckel till befintlig tabell

  4. Hur man får den aktuella tiden i SQLite