PostgreSQL - Fonctions et opérateurs DATE / TIME
Nous avons discuté des types de données Date / Heure dans le chapitre Types de données . Voyons maintenant les opérateurs et les fonctions Date / Heure.
Le tableau suivant répertorie les comportements des opérateurs arithmétiques de base -
Opérateur | Exemple | Résultat |
---|---|---|
+ | date '2001-09-28' + entier '7' | date '2001-10-05' |
+ | date '2001-09-28' + intervalle '1 heure' | horodatage '2001-09-28 01:00:00' |
+ | date '2001-09-28' + heure '03: 00 ' | horodatage '2001-09-28 03:00:00' |
+ | intervalle '1 jour' + intervalle '1 heure' | intervalle '1 jour 01:00:00' |
+ | horodatage '2001-09-28 01:00' + intervalle '23 heures ' | horodatage '2001-09-29 00:00:00' |
+ | heure '01: 00 '+ intervalle' 3 heures ' | heure '04: 00: 00 ' |
- | - intervalle '23 heures ' | intervalle '-23: 00: 00' |
- | date '2001-10-01' - date '2001-09-28' | entier '3' (jours) |
- | date '2001-10-01' - entier '7' | date '2001-09-24' |
- | date '2001-09-28' - intervalle '1 heure' | horodatage '2001-09-27 23:00:00' |
- | heure '05: 00 '- heure '03: 00' | intervalle '02: 00: 00 ' |
- | heure '05: 00 '- intervalle' 2 heures ' | heure '03: 00: 00 ' |
- | horodatage '2001-09-28 23:00' - intervalle '23 heures ' | horodatage '2001-09-28 00:00:00' |
- | intervalle '1 jour' - intervalle '1 heure' | intervalle '1 jour -01: 00: 00' |
- | horodatage '2001-09-29 03:00' - horodatage '2001-09-27 12:00' | intervalle '1 jour 15:00:00' |
* | 900 * intervalle '1 seconde' | intervalle '00: 15: 00 ' |
* | 21 * intervalle '1 jour' | intervalle '21 jours ' |
* | double précision '3,5' * intervalle '1 heure' | intervalle '03: 30: 00 ' |
/ | intervalle '1 heure' / double précision '1,5' | intervalle '00: 40: 00 ' |
Ce qui suit est la liste de toutes les fonctions importantes liées à la date et à l'heure disponibles.
S. Non. | Description de la fonction |
---|---|
1 | ÂGE()
Soustraire des arguments |
2 | DATE / HEURE ACTUELLE ()
Date et heure actuelles |
3 | DATE_PART ()
Obtenir le sous-champ (équivalent à extraire) |
4 | EXTRAIT()
Obtenir le sous-champ |
5 | ISFINITE ()
Test pour la date, l'heure et l'intervalle finis (pas +/- infini) |
6 | JUSTIFIER
Ajuster l'intervalle |
AGE (horodatage, horodatage), AGE (horodatage)
S. Non. | Description de la fonction |
---|---|
1 | AGE(timestamp, timestamp) Lorsqu'il est appelé avec la forme TIMESTAMP du deuxième argument, AGE () soustrait des arguments, produisant un résultat «symbolique» qui utilise des années et des mois et est de type INTERVAL. |
2 | AGE(timestamp) Lorsqu'il est invoqué avec uniquement TIMESTAMP comme argument, AGE () soustrait de current_date (à minuit). |
Exemple de la fonction AGE (horodatage, horodatage) est -
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
L'instruction PostgreSQL donnée ci-dessus produira le résultat suivant -
age
-------------------------
43 years 9 mons 27 days
Exemple de la fonction AGE (horodatage) est -
testdb=# select age(timestamp '1957-06-13');
L'instruction PostgreSQL donnée ci-dessus produira le résultat suivant -
age
--------------------------
55 years 10 mons 22 days
DATE / HEURE ACTUELLE ()
PostgreSQL fournit un certain nombre de fonctions qui renvoient des valeurs liées à la date et à l'heure actuelles. Voici quelques fonctions -
S. Non. | Description de la fonction |
---|---|
1 | CURRENT_DATE Fournit la date actuelle. |
2 | CURRENT_TIME Fournit des valeurs avec fuseau horaire. |
3 | CURRENT_TIMESTAMP Fournit des valeurs avec fuseau horaire. |
4 | CURRENT_TIME(precision) Prend éventuellement un paramètre de précision, ce qui entraîne l'arrondi du résultat à ce nombre de chiffres fractionnaires dans le champ des secondes. |
5 | CURRENT_TIMESTAMP(precision) Prend éventuellement un paramètre de précision, ce qui entraîne l'arrondi du résultat à ce nombre de chiffres fractionnaires dans le champ des secondes. |
6 | LOCALTIME Fournit des valeurs sans fuseau horaire. |
sept | LOCALTIMESTAMP Fournit des valeurs sans fuseau horaire. |
8 | LOCALTIME(precision) Prend éventuellement un paramètre de précision, ce qui entraîne l'arrondi du résultat à ce nombre de chiffres fractionnaires dans le champ des secondes. |
9 | LOCALTIMESTAMP(precision) Prend éventuellement un paramètre de précision, ce qui entraîne l'arrondi du résultat à ce nombre de chiffres fractionnaires dans le champ des secondes. |
Exemples utilisant les fonctions du tableau ci-dessus -
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQL fournit également des fonctions qui renvoient l'heure de début de l'instruction courante, ainsi que l'heure actuelle actuelle au moment où la fonction est appelée. Ces fonctions sont -
S. Non. | Description de la fonction |
---|---|
1 | transaction_timestamp() Il équivaut à CURRENT_TIMESTAMP, mais son nom reflète clairement ce qu'il renvoie. |
2 | statement_timestamp() Il renvoie l'heure de début de l'instruction en cours. |
3 | clock_timestamp() Il renvoie l'heure actuelle réelle et, par conséquent, sa valeur change même dans une seule commande SQL. |
4 | timeofday() Il renvoie l'heure actuelle réelle, mais sous la forme d'une chaîne de texte formatée plutôt qu'un horodatage avec une valeur de fuseau horaire. |
5 | now() C'est un équivalent PostgreSQL traditionnel de transaction_timestamp (). |
DATE_PART (texte, horodatage), DATE_PART (texte, intervalle), DATE_TRUNC (texte, horodatage)
S. Non. | Description de la fonction |
---|---|
1 | DATE_PART('field', source) Ces fonctions obtiennent les sous-champs. Le paramètre de champ doit être une valeur de chaîne, pas un nom. Les noms de champ valides sont: siècle, jour, décennie, dow, doy, époque, heure, isodow, isoyear, microsecondes, millénaire, millisecondes, minute, mois, trimestre, seconde, fuseau horaire, timezone_hour, timezone_minute, semaine, année. |
2 | DATE_TRUNC('field', source) Cette fonction est conceptuellement similaire à la fonction trunc pour les nombres. source est une expression de valeur de type horodatage ou intervalle. Le champ sélectionne à quelle précision tronquer la valeur d'entrée. La valeur de retour est de type horodatage ou intervalle . Les valeurs valides pour le champ sont: microsecondes, millisecondes, seconde, minute, heure, jour, semaine, mois, trimestre, année, décennie, siècle, millénaire |
Voici des exemples de fonctions DATE_PART ( 'champ' , source) -
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
Voici des exemples de fonctions DATE_TRUNC ( 'field' , source) -
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
EXTRACT (champ de l'horodatage), EXTRACT (champ de l'intervalle)
le EXTRACT(field FROM source)La fonction récupère des sous-champs tels que l'année ou l'heure à partir des valeurs de date / heure. La source doit être une expression de valeur de type horodatage, heure ou intervalle . Le champ est un identificateur ou une chaîne qui sélectionne le champ à extraire de la valeur source. La fonction EXTRACT renvoie des valeurs de type double précision .
Les noms de champ suivants sont valides (similaires aux noms de champ de fonction DATE_PART): siècle, jour, décennie, dow, doy, epoch, hour, isodow, isoyear, microseconds, millennium, milliseconds, minute, month, quarter, second, timezone, timezone_hour , timezone_minute, semaine, année.
Voici des exemples de fonctions EXTRACT ( 'field' , source) -
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
ISFINITE (date), ISFINITE (horodatage), ISFINITE (intervalle)
S. Non. | Description de la fonction |
---|---|
1 | ISFINITE(date) Tests pour date finie. |
2 | ISFINITE(timestamp) Tests d'horodatage fini. |
3 | ISFINITE(interval) Tests d'intervalle fini. |
Voici les exemples des fonctions ISFINITE () -
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
JUSTIFY_DAYS (intervalle), JUSTIFY_HOURS (intervalle), JUSTIFY_INTERVAL (intervalle)
S. Non. | Description de la fonction |
---|---|
1 | JUSTIFY_DAYS(interval) Ajuste l'intervalle pour que les périodes de 30 jours soient représentées sous forme de mois. Retourner leinterval type |
2 | JUSTIFY_HOURS(interval) Ajuste l'intervalle pour que les périodes de 24 heures soient représentées sous forme de jours. Retourner leinterval type |
3 | JUSTIFY_INTERVAL(interval) Ajuste l'intervalle à l'aide de JUSTIFY_DAYS et JUSTIFY_HOURS, avec des ajustements de signe supplémentaires. Retourner leinterval type |
Voici les exemples des fonctions ISFINITE () -
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)