Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
CASTfonction
La CAST fonction convertit un type de données en un autre type de données compatible. Par exemple, vous pouvez convertir une chaîne en date ou un type numérique en chaîne. CASTeffectue une conversion à l'exécution, ce qui signifie que la conversion ne modifie pas le type de données d'une valeur dans une table source. Elle n’est modifiée que dans le contexte de la requête.
La CAST fonction est très similaire àCONVERTfonction, en ce sens qu'ils convertissent tous les deux un type de données en un autre, mais qu'ils sont appelés différemment.
Certains types de données nécessitent une conversion explicite en d'autres types de données à l'aide de la CONVERT fonction CAST ou. D'autres types de données peuvent être convertis implicitement, dans le cadre d'une autre commande, sans utiliser CAST ouCONVERT. Consultez Compatibilité et conversion de types.
Syntaxe
Utilisez l’une de ces deux formes de syntaxes équivalentes pour convertir les expressions cast d’un type de données à un autre.
CAST ( expression AS type ) expression :: type
Arguments
- expression
-
Expression qui correspond à une ou plusieurs valeurs, par exemple un nom de colonne ou un littéral. La conversion de valeurs null renvoie des valeurs null. L’expression ne peut pas contenir des chaînes vides.
- type
-
L’un des Types de données pris en charge.
Type de retour
CASTrenvoie le type de données spécifié par l'argument type.
Note
Amazon Redshift renvoie un message d'erreur si vous essayez d'effectuer une conversion problématique, telle qu'une DECIMAL conversion qui perd en précision, comme suit :
select 123.456::decimal(2,1);
ou une INTEGER conversion qui provoque un débordement :
select 12345678::smallint;
Exemples
Certains exemples utilisent la base de TICKITdonnées d'exemple. Pour plus d'informations sur la configuration d'échantillons de données, voir Charger des données.
Les deux requêtes suivantes sont équivalentes. Toutes deux convertissent une valeur décimale en un nombre entier :
select cast(pricepaid as integer) from sales where salesid=100;
pricepaid ----------- 162 (1 row)
select pricepaid::integer from sales where salesid=100;
pricepaid ----------- 162 (1 row)
Ce qui suit produit un résultat similaire. Il ne nécessite pas d’exemples de données pour s’exécuter :
select cast(162.00 as integer) as pricepaid;
pricepaid ----------- 162 (1 row)
Dans cet exemple, les valeurs d’une colonne d’horodatage sont converties en dates, ce qui entraîne la suppression de l’horodatage de chaque résultat :
select cast(saletime as date), salesid from sales order by salesid limit 10;
saletime | salesid -----------+--------- 2008-02-18 | 1 2008-06-06 | 2 2008-06-06 | 3 2008-06-09 | 4 2008-08-31 | 5 2008-07-16 | 6 2008-06-26 | 7 2008-07-10 | 8 2008-07-22 | 9 2008-08-06 | 10 (10 rows)
Si vous ne l'avez pas utilisé CAST comme illustré dans l'exemple précédent, les résultats incluraient l'heure : 2008-02-18 02:36:48.
La requête suivante convertit des données de caractères variables en date. Elle ne nécessite pas d’exemples de données pour s’exécuter.
select cast('2008-02-18 02:36:48' as date) as mysaletime;
mysaletime -------------------- 2008-02-18 (1 row)
Dans cet exemple, les valeurs d’une colonne de dates sont converties en horodatages :
select cast(caldate as timestamp), dateid from date order by dateid limit 10;
caldate | dateid --------------------+-------- 2008-01-01 00:00:00 | 1827 2008-01-02 00:00:00 | 1828 2008-01-03 00:00:00 | 1829 2008-01-04 00:00:00 | 1830 2008-01-05 00:00:00 | 1831 2008-01-06 00:00:00 | 1832 2008-01-07 00:00:00 | 1833 2008-01-08 00:00:00 | 1834 2008-01-09 00:00:00 | 1835 2008-01-10 00:00:00 | 1836 (10 rows)
Dans un cas comme dans l'exemple précédent, vous pouvez obtenir un contrôle supplémentaire sur le formatage de sortie en utilisant TO_ CHAR.
Dans cet exemple, un nombre entier est converti en chaîne de caractères :
select cast(2008 as char(4));
bpchar -------- 2008
Dans cet exemple, une valeur DECIMAL (6,3) est convertie en valeur DECIMAL (4,1) :
select cast(109.652 as decimal(4,1));
numeric --------- 109.7
Cet exemple montre une expression plus complexe. La PRICEPAID colonne (une colonne DECIMAL (8,2)) du SALES tableau est convertie en colonne DECIMAL (38,2) et les valeurs sont multipliées par 100000000000000000000 :
select salesid, pricepaid::decimal(38,2)*100000000000000000000 as value from sales where salesid<10 order by salesid;
salesid | value ---------+---------------------------- 1 | 72800000000000000000000.00 2 | 7600000000000000000000.00 3 | 35000000000000000000000.00 4 | 17500000000000000000000.00 5 | 15400000000000000000000.00 6 | 39400000000000000000000.00 7 | 78800000000000000000000.00 8 | 19700000000000000000000.00 9 | 59100000000000000000000.00 (9 rows)
Note
Vous ne pouvez pas effectuer d'CONVERTopération CAST ou sur le type de GEOMETRY
données pour le remplacer par un autre type de données. Cependant, vous pouvez fournir une représentation hexadécimale d'une chaîne littérale au format binaire (EWKB) étendu et connu comme entrée pour les fonctions qui acceptent un GEOMETRY
argument. Par exemple, la fonction ST_AsText
suivante attend un type de données GEOMETRY
.
SELECT ST_AsText('01010000000000000000001C400000000000002040');
st_astext ------------ POINT(7 8)
Vous pouvez également spécifier de façon explicite le type de données GEOMETRY
.
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
st_astext ------------ POINT(5 6)