Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tydzień pracy SQL w Oracle

Aby spełnić Twoje wymagania, musisz użyć kombinacji IW i WW format. Możesz je połączyć za pomocą CASE wyrażenie.

Jeśli chcesz wygenerować listę dat dla całego roku, możesz użyć generator wierszy metoda.

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.

UWAGA:

Wartość 15 do wygenerowania 15 wierszy, a daty są zakodowane powyżej tylko w celu demonstracji przy użyciu klauzuli WITH, ponieważ OP nie dostarczył przypadku testowego z instrukcjami tworzenia i wstawiania. W rzeczywistości musisz użyć nazw tabel i kolumn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL — Konwertuj wartości kolumn z N wierszy na N kolumn w 1 wierszu

  2. Ucieczka podkreślenia w PL/SQL

  3. ora-01722 nieprawidłowa liczba przy użyciu count(1) na operatorze minus dwóch widoków

  4. Widok wymaga logiki współzależności:możliwe bez MODELU?

  5. Jak uzyskać tygodniowe dane w Oracle?