Fonction CAST - Amazon Redshift

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.

Fonction CAST

La fonction CAST 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. CAST effectue une conversion d’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 fonction CAST est très similaire à la fonction Fonction CONVERT, en ce sens qu’elles convertissent toutes deux un type de données en un autre, mais elles sont appelées différemment.

Certains types de données nécessitent une conversion explicite en d’autres types de données à l’aide de la fonction CAST ou CONVERT. D’autres types de données peuvent être convertis implicitement, dans le cadre d’une autre commande, sans utiliser CAST ou CONVERT. veuillez consulter 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

CAST renvoie le type de données spécifié par l’argument type.

Note

Amazon Redshift renvoie une erreur si vous essayez d’effectuer une conversion problématique, telle que la conversion DECIMAL suivante qui perd en précision :

select 123.456::decimal(2,1);

ou une conversion INTEGER qui entraîne un dépassement de capacité :

select 12345678::smallint;

Exemples

Certains exemples utilisent l’exemple de base de données TICKIT. Pour plus d’informations sur la configuration d’exemples de données, consultez Démarrage avec les clusters Amazon Redshift et le chargement 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 n’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 colonne PRICEPAID (colonne DECIMAL(8,2)) de la table SALES est convertie en une 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’opération CAST ou CONVERT sur le type de données GEOMETRY pour le remplacer par un autre type de données. Toutefois, vous pouvez fournir une représentation hexadécimale du littéral d’une chaîne au format EWKB (extended well-known binary) en tant qu’entrée des fonctions qui acceptent un argument GEOMETRY. 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)