Catégories :

Fonctions de date et d’heure

YEAR* / DAY* / WEEK* / MONTH / QUARTER

Extrait la partie de date correspondante d’une date ou d’un horodatage.

Ces fonctions sont des alternatives à l’utilisation de la fonction DATE_PART (ou EXTRACT) avec la partie de date équivalente (voir Parties de date et d’heure prises en charge).

Voir aussi :

HOUR / MINUTE / SECOND

Syntaxe

YEAR( <date_or_timestamp_expr> )

YEAROFWEEK( <date_or_timestamp_expr> )
YEAROFWEEKISO( <date_or_timestamp_expr> )

DAY( <date_or_timestamp_expr> )

DAYOFMONTH( <date_or_timestamp_expr> )
DAYOFWEEK( <date_or_timestamp_expr> )
DAYOFWEEKISO( <date_or_timestamp_expr> )
DAYOFYEAR( <date_or_timestamp_expr> )

WEEK( <date_or_timestamp_expr> )

WEEKOFYEAR( <date_or_timestamp_expr> )
WEEKISO( <date_or_timestamp_expr> )

MONTH( <date_or_timestamp_expr> )

QUARTER( <date_or_timestamp_expr> )
Copy

Notes sur l’utilisation

Nom de la fonction

Partie de date extraite de la date d’entrée/horodatage

Valeurs possibles

YEAR

Année

Toute année valide (par ex. 2017)

YEAROFWEEK [1]

Année à laquelle la semaine extraite appartient

Toute année valide (par ex. 2017)

YEAROFWEEKISO

Identique à YEAROFWEEK, sauf que la sémantique ISO est utilisée

Toute année valide (par ex. 2017)

DAY , DAYOFMONTH

Jour (numéro) du mois

1 à 31

DAYOFWEEK [1]

Jour (numéro) de la semaine

0 à 7

DAYOFWEEKISO

Identique à DAYOFWEEK, sauf que la sémantique ISO est utilisée

1 à 7

DAYOFYEAR

Jour (numéro) de l’année

1 à 366

WEEK , WEEKOFYEAR [1]

Semaine (numéro) de l’année

1 à 54

WEEKISO

Identique à WEEK, sauf que la sémantique ISO est utilisée

1 à 53

MONTH

Mois (numéro) de l’année

1 à 12

QUARTER

Trimestre (numéro) de l’année

1 à 4

[1] Résultats dictés par les valeurs définies pour les paramètres de session WEEK_OF_YEAR_POLICY et/ou WEEK_START.

Pour plus de détails sur la sémantique ISO et le paramètre, voir Semaines civiles et jours de semaine.

Exemples

Ce qui suit illustre l’utilisation des fonctions YEAR, MONTH, DAY, DAYOFWEEK, DAYOFYEAR et QUARTER :

SELECT 
       '2013-05-08T23:39:20.123-07:00'::TIMESTAMP AS tstamp,
       YEAR(tstamp) AS "YEAR", 
       QUARTER(tstamp) AS "QUARTER OF YEAR",
       MONTH(tstamp) AS "MONTH", 
       DAY(tstamp) AS "DAY",
       DAYOFMONTH(tstamp) AS "DAY OF MONTH",
       DAYOFYEAR(tstamp) AS "DAY OF YEAR";
+-------------------------+------+-----------------+-------+-----+--------------+-------------+
| TSTAMP                  | YEAR | QUARTER OF YEAR | MONTH | DAY | DAY OF MONTH | DAY OF YEAR |
|-------------------------+------+-----------------+-------+-----+--------------+-------------|
| 2013-05-08 23:39:20.123 | 2013 |               2 |     5 |   8 |            8 |         128 |
+-------------------------+------+-----------------+-------+-----+--------------+-------------+
Copy

Ce qui suit illustre l’utilisation des fonctions WEEK, WEEKISO, WEEKOFYEAR, YEAROFWEEK et YEAROFWEEKISO. Le paramètre de session WEEK_OF_YEAR_POLICY est défini pour indiquer que la première semaine de l’année est la semaine contenant le 1er janvier de cette année.

ALTER SESSION SET WEEK_OF_YEAR_POLICY = 1;
Copy
SELECT 
       '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp,
       WEEK(tstamp) AS "WEEK",
       WEEKISO(tstamp) AS "WEEK ISO",
       WEEKOFYEAR(tstamp) AS "WEEK OF YEAR",
       YEAROFWEEK(tstamp) AS "YEAR OF WEEK",
       YEAROFWEEKISO(tstamp) AS "YEAR OF WEEK ISO"
       ;
+-------------------------+------+----------+--------------+--------------+------------------+
| TSTAMP                  | WEEK | WEEK ISO | WEEK OF YEAR | YEAR OF WEEK | YEAR OF WEEK ISO |
|-------------------------+------+----------+--------------+--------------+------------------|
| 2016-01-02 23:39:20.123 |    1 |       53 |            1 |         2016 |             2015 |
+-------------------------+------+----------+--------------+--------------+------------------+
Copy

Ce qui suit illustre également l’utilisation des fonctions WEEK, WEEKISO, WEEKOFYEAR, YEAROFWEEK et YEAROFWEEKISO. Le paramètre de session WEEK_OF_YEAR_POLICY est défini pour indiquer que la première semaine de l’année est la première semaine de l’année qui contient au moins 4 jours de cette année. (Ainsi, par exemple, la semaine du 26 décembre 2010 au 1er janvier 2011 est considérée comme la dernière semaine de 2010 et non la première semaine de 2011, car même si elle contient le 1er janvier 2011, moins de la moitié de la semaine est en 2011.)

ALTER SESSION SET WEEK_OF_YEAR_POLICY = 0;
Copy
SELECT 
       '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp,
       WEEK(tstamp) AS "WEEK",
       WEEKISO(tstamp) AS "WEEK ISO",
       WEEKOFYEAR(tstamp) AS "WEEK OF YEAR",
       YEAROFWEEK(tstamp) AS "YEAR OF WEEK",
       YEAROFWEEKISO(tstamp) AS "YEAR OF WEEK ISO"
       ;
+-------------------------+------+----------+--------------+--------------+------------------+
| TSTAMP                  | WEEK | WEEK ISO | WEEK OF YEAR | YEAR OF WEEK | YEAR OF WEEK ISO |
|-------------------------+------+----------+--------------+--------------+------------------|
| 2016-01-02 23:39:20.123 |   53 |       53 |           53 |         2015 |             2015 |
+-------------------------+------+----------+--------------+--------------+------------------+
Copy

Ce qui suit illustre l’utilisation des fonctions DAYOFWEEK et DAYOFWEEKISO. Le paramètre de session WEEK_START est défini pour indiquer que la semaine commence le dimanche.

ALTER SESSION SET WEEK_START = 7;
Copy
SELECT 
       '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp,
       DAYOFWEEK(tstamp) AS "DAY OF WEEK",
       DAYOFWEEKISO(tstamp) AS "DAY OF WEEK ISO"
       ;
+-------------------------+-------------+-----------------+
| TSTAMP                  | DAY OF WEEK | DAY OF WEEK ISO |
|-------------------------+-------------+-----------------|
| 2016-01-02 23:39:20.123 |           7 |               6 |
+-------------------------+-------------+-----------------+
Copy

Ce qui suit illustre l’utilisation des fonctions DAYOFWEEK et DAYOFWEEKISO. Le paramètre de session WEEK_START est défini pour indiquer que la semaine commence le lundi.

ALTER SESSION SET WEEK_START = 0;
Copy
SELECT 
       '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp,
       DAYOFWEEK(tstamp) AS "DAY OF WEEK",
       DAYOFWEEKISO(tstamp) AS "DAY OF WEEK ISO"
       ;
+-------------------------+-------------+-----------------+
| TSTAMP                  | DAY OF WEEK | DAY OF WEEK ISO |
|-------------------------+-------------+-----------------|
| 2016-01-02 23:39:20.123 |           6 |               6 |
+-------------------------+-------------+-----------------+
Copy

Pour plus d’exemples, voir Utilisation des valeurs de date et d’heure.

Pour des exemples plus détaillés des fonctions liées à la semaine (DAYOFWEEK, WEEK, WEEKOFYEAR, YEAROFWEEK, etc.), voir Semaines civiles et jours de semaine.