sql >> Databáze >  >> RDS >> Oracle

SQL pracovní týden v Oracle

Pro váš požadavek musíte použít kombinaci IW a WW formát. Můžete je kombinovat pomocí CASE výraz.

Pokud chcete vygenerovat seznam dat pro celý rok, můžete použít generátor řádků 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.

POZNÁMKA:

Hodnota 15 vygenerovat 15 řádků a data jsou pevně zakódována výše jen pro demonstraci pomocí klauzule WITH, protože OP neposkytla testovací případ s příkazy create a insert. Ve skutečnosti musíte použít názvy tabulek a sloupců.



  1. nelze vložit datový rámec do existující tabulky Oracle

  2. docker mysql na jiném portu

  3. Jak použít dynamický parametr v klauzuli IN dotazu s názvem JPA?

  4. mysql select příkaz s jedinečným a maximálním výběrem?