| Documentation PostgreSQL 7.2 | ||
|---|---|---|
| <<< Previous | Fonctions et Opérateurs | Next >>> |
![]() | Auteur |
|---|---|
Écrit par Karel Zak (<zakkr@zf.jcu.cz>) le 24.01.2000 |
Les fonctions de formatage PostgreSQL procurent un riche ensemble d'outils pour convertir différents types (date/time, integer, floating point, numeric) en chaînes formatées et pour convertir des chaînes formatées en types spécifiques. Ces fonctions suivent toutes une convention d'appel commune : le premier argument est la valeur à formater et le second argument est un gabarit qui définit le format d'entrée ou sortie.
Table 11. Fonctions de formatage
| Fonction | Retour | Description | Exemple |
|---|---|---|---|
| to_char(timestamp, text) | text | convert time stamp to string | to_char(timestamp 'now','HH12:MI:SS') |
| to_char(interval, text) | text | convert interval to string | to_char(interval '15h 2m 12s','HH24:MI:SS') |
| to_char(int, text) | text | convert int4/int8 to string | to_char(125, '999') |
| to_char(double precision, text) | text | convert real/double precision to string | to_char(125.8, '999D9') |
| to_char(numeric, text) | text | convert numeric to string | to_char(numeric '-125.8', '999D99S') |
| to_date(text, text) | date | convert string to date | to_date('05 Dec 2000', 'DD Mon YYYY') |
| to_timestamp(text, text) | timestamp | convert string to time stamp | to_timestamp('05 Dec 2000', 'DD Mon YYYY') |
| to_number(text, text) | numeric | convert string to numeric | to_number('12,454.8-', '99G999D9S') |
Dans une sortie chaîne modèle, il y a certains modèles reconnus et remplacés par des données appropriées depuis la valeur à formater. Un texte qui n'est pas un modèle de gabarit est simplement recopié mot pour mot. De façon similaire, dans une entrée chaîne modèle, les modèles de gabarit identifient la partie de la donnée d'entrée chaîne à rechercher et les valeurs à retrouver.
Table 12. Modèles de gabarit pour les conversions date/time
| Gabarit | Description |
|---|---|
| HH | hour of day (01-12) |
| HH12 | hour of day (01-12) |
| HH24 | hour of day (00-23) |
| MI | minute (00-59) |
| SS | second (00-59) |
| MS | millisecond (000-999) |
| US | microsecond (000000-999999) |
| SSSS | seconds past midnight (0-86399) |
| AM or A.M. or PM or P.M. | meridian indicator (upper case) |
| am or a.m. or pm or p.m. | meridian indicator (lower case) |
| Y,YYY | year (4 and more digits) with comma |
| YYYY | year (4 and more digits) |
| YYY | last 3 digits of year |
| YY | last 2 digits of year |
| Y | last digit of year |
| BC or B.C. or AD or A.D. | era indicator (upper case) |
| bc or b.c. or ad or a.d. | era indicator (lower case) |
| MONTH | full upper case month name (blank-padded to 9 chars) |
| Month | full mixed case month name (blank-padded to 9 chars) |
| month | full lower case month name (blank-padded to 9 chars) |
| MON | abbreviated upper case month name (3 chars) |
| Mon | abbreviated mixed case month name (3 chars) |
| mon | abbreviated lower case month name (3 chars) |
| MM | month number (01-12) |
| DAY | full upper case day name (blank-padded to 9 chars) |
| Day | full mixed case day name (blank-padded to 9 chars) |
| day | full lower case day name (blank-padded to 9 chars) |
| DY | abbreviated upper case day name (3 chars) |
| Dy | abbreviated mixed case day name (3 chars) |
| dy | abbreviated lower case day name (3 chars) |
| DDD | day of year (001-366) |
| DD | day of month (01-31) |
| D | day of week (1-7; SUN=1) |
| W | week of month (1-5) where first week start on the first day of the month |
| WW | week number of year (1-53) where first week start on the first day of the year |
| IW | ISO week number of year (The first Thursday of the new year is in week 1.) |
| CC | century (2 digits) |
| J | Julian Day (days since January 1, 4712 BC) |
| Q | quarter |
| RM | month in Roman Numerals (I-XII; I=January) - upper case |
| rm | month in Roman Numerals (I-XII; I=January) - lower case |
| TZ | timezone name - upper case |
| tz | timezone name - lower case |
Certaines modifications peuvent être appliquées aux modèles de gabarit pour altérer leur comportement. Par exemple, "FMMonth" est le gabarit "Month" avec le préfixe "FM".
Table 13. Modificateurs de gabarit pour les conversions date/time
| Modificateur | Description | Exemple |
|---|---|---|
| FM prefix | fill mode (suppress padding blanks and zeroes) | FMMonth |
| TH suffix | add upper-case ordinal number suffix | DDTH |
| th suffix | add lower-case ordinal number suffix | DDth |
| FX prefix | Fixed format global option (see below) | FX Month DD Day |
| SP suffix | spell mode (not yet implemented) | DDSP |
Notes d'utilisation :
FM supprime les zeros ou les blancs qui seraient ajoutés pour permettre que la sortie d'un gabarit soit de largeur fixe.
to_timestamp et to_date saute les multiples espaces blancs dans la chaîne d'entrée si l'option FX n'est pas utilisée. FX doit être spécifié en premier dans la gabarit; par exemple to_timestamp('2000 JUN','YYYY MON') est correct, mais to_timestamp('2000 JUN','FXYYYY MON') renvoit une erreur, car to_timestamp attend un espace blanc uniquement.
Si un backslash ("\") est voulu dans une chaîne de constantes, un double backslash ("\\") devra être entré; par exemple '\\HH\\MI\\SS'. Ceci est valable pour n'importe quelle chaîne de constantes dans PostgreSQL.
Habituellement le texte est admis dans les gabarits to_char et sera affiché littéralement. Vous pouvez placer une sous-chaîne entre guillemets pour la forcer à être interprétée comme du texte littéral même s'il contient des mots-clé de gabarit. Par exemple, dans '"Hello Year: "YYYY', les YYYY seront remplacés par les données année, mais le Y seul ne le sera pas.
Si vous voulez afficher des guillemets dans la sortie vous devez les faire précéder d'un backslash, par exemple '\\"YYYY Month\\"'.
La conversion YYYY depuis une chaîne en timestamp ou en date est limitée si vous utilisez une année de plus de quatre chiffres. Vous devez utiliser des caractères qui ne soient pas des chiffres ou des gabarit après YYYY, autrement l'année est toujours interprétée en 4 chiffres. Par exemple, (avec l'année 20000): to_date('200001131', 'YYYYMMDD') sera interprété comme une année à 4 chiffres; le mieux est d'utiliser un séparateur qui ne soit pas un chiffre après l'année, comme to_date('20000-1131', 'YYYY-MMDD') ou to_date('20000Nov31', 'YYYYMonDD').
Les valeurs US millisecond MS et microsecond US dans une conversion depuis une chaîne vers un timestamp sont utilisées en tant que partie des secondes après le point décimal. Par exemple, to_timestamp('12:3', 'SS:MS') n'est pas 3 millisecondes, mais 300, car la conversion comptera 12 + 0.3. Pour le format SS:MS, les valeurs d'entrée 12:3, 12:30, et 12:300 spécifient le même nombre de millisecondes. Pour obtenir trois millisecondes, on doit utiliser 12:003, qui comptera 12 + 0.003 = 12.003 secondes.
Ici un exemple plus complexe : to_timestamp('15:12:02.020.001230','HH:MI:SS.MS.US') soit 15 heures, 12 minutes, et 2 secondes + 20 millisecondes + 1230 microsecondes = 2.021230 secondes.
Table 14. Modèles de gabarits pour les conversions numériques
| Modèle | Description |
|---|---|
| 9 | value with the specified number of digits |
| 0 | value with leading zeros |
| . (period) | decimal point |
| , (comma) | group (thousand) separator |
| PR | negative value in angle brackets |
| S | negative value with minus sign (uses locale) |
| L | currency symbol (uses locale) |
| D | decimal point (uses locale) |
| G | group separator (uses locale) |
| MI | minus sign in specified position (if number < 0) |
| PL | plus sign in specified position (if number > 0) |
| SG | plus/minus sign in specified position |
| RN | roman numeral (input between 1 and 3999) |
| TH or th | convert to ordinal number |
| V | shift n digits (see notes) |
| EEEE | scientific notation (not implemented yet) |
Notes d'utilisation :
Un signe formaté utilisant SG, PL, ou MI n'est pas une ancre dans le nombre; par exemple, to_char(-12, 'S9999') produit ' -12', bmais to_char(-12, 'MI9999') produit '- 12'. Oracle ne permet pas l'utilisation de MI avant 9, mais nécessite plutôt que 9 précède MI.
9 spécifie une valeur avec le même nombre de chiffres qu'il y en a dans les 9. Si un chiffre n'est pas disponible utilisez un expace blanc.
TH ne convertit pas les valeurs inférieures à zero et ne convertit pas les nombres décimaux.
PL, SG, et TH sont des extensions PostgreSQL.
V multiplie les valeurs d'entrée par 10^n, où n est le nombre de chiffres suivant V. to_char ne supporte pas l'utilisation de V combiné avec un point décimal. (Ex., 99.9V99 n'est pas admis.)
Table 15. Exemples to_char
| Entrée | Sortie |
|---|---|
| to_char(now(),'Day, DD HH12:MI:SS') | 'Tuesday , 06 05:39:18' |
| to_char(now(),'FMDay, FMDD HH12:MI:SS') | 'Tuesday, 6 05:39:18' |
| to_char(-0.1,'99.99') | ' -.10' |
| to_char(-0.1,'FM9.99') | '-.1' |
| to_char(0.1,'0.9') | ' 0.1' |
| to_char(12,'9990999.9') | ' 0012.0' |
| to_char(12,'FM9990999.9') | '0012' |
| to_char(485,'999') | ' 485' |
| to_char(-485,'999') | '-485' |
| to_char(485,'9 9 9') | ' 4 8 5' |
| to_char(1485,'9,999') | ' 1,485' |
| to_char(1485,'9G999') | ' 1 485' |
| to_char(148.5,'999.999') | ' 148.500' |
| to_char(148.5,'999D999') | ' 148,500' |
| to_char(3148.5,'9G999D999') | ' 3 148,500' |
| to_char(-485,'999S') | '485-' |
| to_char(-485,'999MI') | '485-' |
| to_char(485,'999MI') | '485' |
| to_char(485,'PL999') | '+485' |
| to_char(485,'SG999') | '+485' |
| to_char(-485,'SG999') | '-485' |
| to_char(-485,'9SG99') | '4-85' |
| to_char(-485,'999PR') | '<485>' |
| to_char(485,'L999') | 'DM 485 |
| to_char(485,'RN') | ' CDLXXXV' |
| to_char(485,'FMRN') | 'CDLXXXV' |
| to_char(5.2,'FMRN') | V |
| to_char(482,'999th') | ' 482nd' |
| to_char(485, '"Good number:"999') | 'Good number: 485' |
| to_char(485.8,'"Pre:"999" Post:" .999') | 'Pre: 485 Post: .800' |
| to_char(12,'99V999') | ' 12000' |
| to_char(12.4,'99V999') | ' 12400' |
| to_char(12.45, '99V9') | ' 125' |
| <<< Previous | Home | Next >>> |
| Filtrage | Up | Fonctions et opérateurs date/time |