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)