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

Générer le nom du mois, le nom du jour, le numéro de la semaine et le numéro du jour entre deux dates

Cela devrait être facile en utilisant Row Generator méthode. Le reste n'est que le masque de format .

Dans SQL*Plus , ma démo est entre les dates '2012-01-01' et '2012-02-20' :

SQL> def date_start = '2012-01-01'
SQL> def date_end   = '2012-02-20'
SQL>
SQL> WITH DATA AS
  2    (SELECT to_date('&date_start', 'YYYY-MM-DD') date1,
  3      to_date('&date_end', 'YYYY-MM-DD') date2
  4    FROM dual
  5    )
  6  SELECT TO_CHAR(date1+LEVEL-1, 'fmMonth') month_name,
  7         TO_CHAR(date1+LEVEL-1, 'fmDay') day_name,
  8         TO_CHAR(date1+LEVEL-1, 'IW') the_week,
  9         TO_CHAR(date1+level-1, 'D') the_day
 10  FROM data
 11    CONNECT BY LEVEL <= date2-date1+1
 12  /
old   2:   (SELECT to_date('&date_start', 'YYYY-MM-DD') date1,
new   2:   (SELECT to_date('2012-01-01', 'YYYY-MM-DD') date1,
old   3:     to_date('&date_end', 'YYYY-MM-DD') date2
new   3:     to_date('2012-02-20', 'YYYY-MM-DD') date2

Résultat

MONTH_NAME DAY_NAME  THE_WEEK THE_DAY
---------- --------- -------- -------
January    Sunday    52       1
January    Monday    01       2
January    Tuesday   01       3
January    Wednesday 01       4
January    Thursday  01       5
January    Friday    01       6
January    Saturday  01       7
January    Sunday    01       1
January    Monday    02       2
January    Tuesday   02       3
January    Wednesday 02       4
January    Thursday  02       5
January    Friday    02       6
January    Saturday  02       7
January    Sunday    02       1
January    Monday    03       2
January    Tuesday   03       3
January    Wednesday 03       4
January    Thursday  03       5
January    Friday    03       6
January    Saturday  03       7
January    Sunday    03       1
January    Monday    04       2
January    Tuesday   04       3
January    Wednesday 04       4
January    Thursday  04       5
January    Friday    04       6
January    Saturday  04       7
January    Sunday    04       1
January    Monday    05       2
January    Tuesday   05       3
February   Wednesday 05       4
February   Thursday  05       5
February   Friday    05       6
February   Saturday  05       7
February   Sunday    05       1
February   Monday    06       2
February   Tuesday   06       3
February   Wednesday 06       4
February   Thursday  06       5
February   Friday    06       6
February   Saturday  06       7
February   Sunday    06       1
February   Monday    07       2
February   Tuesday   07       3
February   Wednesday 07       4
February   Thursday  07       5
February   Friday    07       6
February   Saturday  07       7
February   Sunday    07       1
February   Monday    08       2

51 rows selected.

SQL>