Bases de données – PostgreSQL pratique – Coercition de type

Coercition de type

PostgreSQL supporte trois conventions distinctes pour la coercition de type (aussi appelée type casting, ouxplicit type casting). La coercition de type est un terme un peu laid qui fait référence à une méthodePostgreSQL pour changer une valeur d’un type de données à un autre. Au milieu d’une instruction SQL, cela a l’effet net de créer explicitement une constante d’un type arbitraire.

Généralement, l’une des trois méthodes suivantes peut être utilisée afin de couler la valeur contenue dans une constante de chaîne vers un autre type :

  • type ‘valeur’

  • ‘valeur ‘::type

  • CAST (‘valeur ‘ AS type )

Dans le cas de constantes numériques maintenues que vous souhaitez couler en une chaîne de caractères, vous devrez utiliser l’une des formes syntaxiques suivantes :

  • valeur ::type

  • CAST (valeur AS type )

La valeur dans cette syntaxe représente la constante dont vous souhaitez modifier le type de données, et le type représente le type dans lequel vous souhaitez contraindre, ou couler, la valeur.

Note : N’oubliez pas que le type argent est déprécié, et donc pas facilement cast.

Les constantes ne sont pas les seules valeurs de données qui peuvent être coercies à différents types. Les colonnes d’un ensemble de données retournées par une requête SQLpeuvent être coulées en utilisant son identifiant dans l’une des formes syntaxiques suivantes :

  • identifiant ::type

  • CAST (identifiant AS type )

N’oubliez pas que tous les types de données ne peuvent pas être coercitifs dans tous les autres types de données. Par exemple, il n’y a aucun moyen significatif de convertir la chaîne de caractères abcd en un type de bit binaire. Une conversion incorrecte entraînera une erreur de PostgreSQL. Les castings valides courants sont ceux d’une chaîne de caractères, d’un type date/heure ou d’un type numérique vers du texte, ou de chaînes de caractères vers des valeurs numériques.

En plus de ces conventions de casting de type, il existe certaines fonctions qui peuvent être appelées pour obteniressentiellement le même effet qu’un cast explicite de l’une des formes mentionnées précédemment. Elles portent souvent le nom du type lui-même (comme la fonction text()), bien que d’autres soient nommées plus spécifiquement (comme bitfromint4()). L’exemple 3-30 montre une telle fonction, convertissant le nombre entier 1000 en une chaîne de caractères de typetext représentant les caractères 1000.

Exemple 3-30. Utilisation des fonctions de conversion de type

booktown=# SELECT text(1000) booktown-# AS explicit_text; explicit_text--------------- 1000(1 row)

En raison de la sémantique conflictuelle reconnue par l’analyseur syntaxique de PostgreSQL, le format de coercition de type ‘value ‘ ne peut être utilisé que pour spécifier le type de données d’une seule valeur (par exemple, une constante de chaîne de caractères liée par des guillemets simples). En revanche, les autres méthodes disponibles de coercition de type(‘valeur ‘::type,CAST(‘valeur’ AS type )et les fonctions de conversion de type, le cas échéant) peuvent être utilisées pour spécifier le type d’expressions arbitraires.

Ceci est en partie parce que tenter de suivre un type de données avec une expression groupée (par ex, entre parenthèses) fera que PostgreSQL attendra une fonction avec le nom du type de données fourni (ce qui provoquera souvent une erreur) alors que chacune des autres méthodes est syntaxiquement valide sur des expressions groupées.

booktown=# SELECT 1 + integer ('1' || '2') AS add_one_to_twelve;ERROR: Function 'integer(text)' does not exist Unable to identify a function that satisfies the given argument types You may need to add explicit typecastsbooktown=# SELECT 1 + ('1' || '2')::integer AS add_one_to_twelve; add_one_to_twelve------------------- 13(1 row)booktown=# SELECT 1 + CAST('1' || '2' AS integer) AS add_on_to_twelve; add_on_to_twelve------------------ 13(1 row)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.