| Documentation PostgreSQL 7.2 | ||
|---|---|---|
| <<< Previous | Fonctions et Opérateurs | Next >>> |
La Table 17 montre les fonctions disponibles pour le traitement des valeurs date/time. La Table 16illustre les comportements des opérateurs arithmétiques basiques (+, *, etc.). Pour les fonctions de formatage voir the section called Fonctions de formatage de type. Vous devriez être familiers avec avec les types date/time (voir the section called Types Date/Time in the chapter called Types).
Les opérateurs date/time décrits ci-dessous ont un comportement similaire aux types time zones.
Table 16. Opérateurs Date/Time
| Nom | Exemple | Résultat |
|---|---|---|
| + | timestamp '2001-09-28 01:00' + interval '23 hours' | timestamp '2001-09-29 00:00' |
| + | date '2001-09-28' + interval '1 hour' | timestamp '2001-09-28 01:00' |
| + | time '01:00' + interval '3 hours' | time '04:00' |
| - | timestamp '2001-09-28 23:00' - interval '23 hours' | timestamp '2001-09-28' |
| - | date '2001-09-28' - interval '1 hour' | timestamp '2001-09-27 23:00' |
| - | time '05:00' - interval '2 hours' | time '03:00' |
| - | interval '2 hours' - time '05:00' | time '03:00:00' |
| * | interval '1 hour' * int '3' | interval '03:00' |
| / | interval '1 hour' / int '3' | interval '00:20' |
Les fonctions date/time sont résumées ci-dessous, avec des détails supplémentaires.
Table 17. Fonctions Date/Time
| Nom | Retour | Description | Exemple | Résultat |
|---|---|---|---|---|
| age(timestamp) | interval | Subtract from today | age(timestamp '1957-06-13') | 43 years 8 mons 3 days |
| age(timestamp, timestamp) | interval | Subtract arguments | age('2001-04-10', timestamp '1957-06-13') | 43 years 9 mons 27 days |
| current_date | date | Today's date; see below | ||
| current_time | time | Time of day; see below | ||
| current_timestamp | timestamp | Date and time; see below | ||
| date_part(text, timestamp) | double precision | Get subfield (equivalent to extract); see also below | date_part('hour', timestamp '2001-02-16 20:38:40') | 20 |
| date_part(text, interval) | double precision | Get subfield (equivalent to extract); see also below | date_part('month', interval '2 years 3 months') | 3 |
| date_trunc(text, timestamp) | timestamp | Truncate to specified precision; see also below | date_trunc('hour', timestamp '2001-02-16 20:38:40') | 2001-02-16 20:00:00+00 |
| extract(field from timestamp) | double precision | Get subfield; see also below | extract(hour from timestamp '2001-02-16 20:38:40') | 20 |
| extract(field from interval) | double precision | Get subfield; see also below | extract(month from interval '2 years 3 months') | 3 |
| isfinite(timestamp) | boolean | Test for finite time stamp (neither invalid nor infinity) | isfinite(timestamp '2001-02-16 21:28:30') | true |
| isfinite(interval) | boolean | Test for finite interval | isfinite(interval '4 hours') | true |
| now() | timestamp | Current date and time (equivalent to current_timestamp); see below | ||
| timeofday() | text | Current date and time; see below | timeofday() | Wed Feb 21 17:01:13.000126 2001 EST |
| timestamp(date) | timestamp | date to timestamp | timestamp(date '2000-12-25') | 2000-12-25 00:00:00 |
| timestamp(date, time) | timestamp | date and time to timestamp | timestamp(date '1998-02-24',time '23:07') | 1998-02-24 23:07:00 |
EXTRACT (field FROM source) |
La fonction extract retrouve les sous-champs des valeurs date/time, comme l'année ou l'heure. source est une expression de valeur qui s'évalue aux types timestamp ou interval. (Les expressions de type date ou time seront forcées en timestamp et peuvent être utilisées de cette façon.) field est un identifiant ou une chaîne qui sélectionne quel champ à extraire d'une valeur source. La fonction extract renvoit des valeurs de type double precision. Les valeurs suivantes sont valides :
Le champ année divisé par 100
Notez que le résultat du champ century est simplement le champ année divisé par 100, et pas la définition conventionnelle du vingtième siècle.
Le champ jour (du mois), (1 - 31)
Le champ année divisé par 10
Le jour de la semaine (0 - 6; dimanche est 0) (pour les valeurs timestamp uniquement)
Le jour de l'année (1 - 365/366) (pour les valeurs timestamp uniquement)
Pour les valeurs date et timestamp, le nombre de secondes depuis le 01.01.1970 à 00:00:00-00 (le résultat peut être négatif); pour les valeurs interval, le nombre total de secondes dans interval.
Le champ heure (0 - 23)
Le champ secondes, incluant les fractions multiplié par 1 000 000. Notez que ceci inclut les secondes pleines.
Le champ année divisé par 1000
Notez que le résultat du champ millenium est simplement le champ année divisé par 1000, et pas la définition conventionnelle qui place les années dans le second millénaire.
Le champ secondes, incluant les fractions, multiplié par 1000. Notez que ceci inclut les secondes pleines.
Le champ minutes (0 - 59)
Pour les valeurs timestamp, le numéro du mois dans l'année (1 - 12) ; pour les valeurs interval le numéro des mois, modulo 12 (0 - 11)
Le trimestre de l'année (1 - 4) dans lequel se trouve le jour (pour les valeurs timestamp uniquement)
Le champ seconde, incluent les fractions (0 - 59[1])
Le composant heure de la zone horaire.
Le composant minute de la zone horaire.
Depuis une valeur timestamp, calcule le nombre de semaines de l'année dans laquelle se trouve le jour. Par définition (ISO 8601), la première semaine d'une année contient le 4 janvier de cette année. (La semaine ISO démarre un lundi). En d'autres termes, le premier jeudi de l'année est dans la semaine 1 de cette année.
Le champ année
La première intention de la fonction extract est le processus de calcul. Pour le formatage des valeurs date/time pour l'affichage, voir the section called Fonctions de formatage de type.
La fonction date_part est modelée sur Ingres équivalent à la fonction SQL extract:
date_part('field', source) |
La fonction date_truncest d'un concept similaire à la fonction trunc pour les nombres.
date_trunc('field', source) |
Les valeurs correctes pour field sont :
| microseconds |
| milliseconds |
| second |
| minute |
| hour |
| day |
| month |
| year |
| decade |
| century |
| millennium |
Les fonctions suivantes sont disponibles pour obtenir la date et l'heure courantes :
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME ( precision ) CURRENT_TIMESTAMP ( precision ) |
![]() | Avant PostgreSQL 7.2, les paramètres de précision n'étaient pas implémentés, et le résultat toujours affiché en secondes pleines. |
![]() | Le standard SQL99 nécessite que ces fonctions soient écrites sans aucune parenthèse, sauf si un paramètre de précision est donné. Dans PostgreSQL 7.2, deux parenthèses vides peuvent être écrites, mais c'est déconseillé et pourra être supprimé dans les prochaines versions. |
SELECT CURRENT_TIME; 14:39:53.662522-05 SELECT CURRENT_DATE; 2001-12-23 SELECT CURRENT_TIMESTAMP; 2001-12-23 14:39:53.662522-05 SELECT CURRENT_TIMESTAMP(2); 2001-12-23 14:39:53.66-05 |
La fonction now() est l'équivalent PostgreSQL de CURRENT_TIMESTAMP.
Il existe aussi timeofday(), qui pour des raisons historiques renvoit une chaîne texte plutôt qu'une valeur timestamp :
Il est important de comprendre que CURRENT_TIMESTAMP et ses diverses fonctions renvoient toutes l'heure du début de la transaction; leurs valeurs ne s'incrémentent pas tandis qu'une transaction est en cours. Mais timeofday() renvoit l'heure courante.
Tous les types date/time acceptent aussi la valeur spéciale now pour spécifier le date et l'heure courantes. Ainsi, les trois suivantes afficheront toutes le même résultat.
SELECT CURRENT_TIMESTAMP; SELECT now(); SELECT TIMESTAMP 'now'; |
![]() | Vous n'utiliserez pas la troisième forme quand vous spécifiez une valeur DEFAULT lors de la création d'une table. Le système convertira now en timestamp dès que la constante est analysée, ainsi que lorsque la valeur par défaut est nécessaire, l'heure de la création de la table sera utilisée ! Les deux premières formes ne seront pas évaluées jusqu'à ce que la valeur par défaut soit utilisée, car elles représentent des appels fonction. Ainsi elle fourniront le comportement attendu pour l'heure par défaut de l'insertion de la ligne. |
| [1] | 60 si les secondes sautées sont implémentées dans le système d'exploitation |
| <<< Previous | Home | Next >>> |
| Fonctions de formatage de type | Up | Fonctions et opérateurs géométriques |