Les types de données et les fonctions

Les types de données

Les principaux types de données en SQL sont :

CHARACTER (ou CHAR) : valeur alpha de longueur fixe.

CHARACTER VARYING (ou VARCHAR) : valeur alpha de longueur maximale fixée.

TEXT : suite longue de caractères (sans limite de taille).

NUMERIC (ou DECIMAL ou DEC) : décimal

INTEGER (ou INT) : entier long

REAL : réel à virgule flottante dont la représentation est binaire.

BOOLEAN (ou LOGICAL) : vrai/faux

DATE : date du calendrier grégorien.

RemarqueLe typage des données

SQLite propose une gestion spécifique et simplifiée des types de données.

PostgreSQL propose une gestion beaucoup plus complète. Certains de ses types sont spécifiques (non normalisés).

Les extensions spatiales de ces SGBDR ajoutent des types géométriques (points, lignes,...) que nous verrons plus tard

Les fonctions

SQL propose des fonctions dont on trouvera une description par exemple ici

Examinons en quelques unes...

Fonctions de transtypage:

cast (expr as type) : Est la fonction standard SQL qui permet de convertir un type en un autre.

Exemple :

Si x_commune est un champ de type INTEGER dans la table commune

SELECT x_commune FROM commune LIMIT 1

renvoi 478935

(noter l'utilisation de la clause LIMIT qui permet d'indiquer le nombre maximum d'enregistrements en retour. Il est également possible d'utiliser la clause OFFSET pour décaler le nombre de lignes à obtenir

ex : SELECT * FROM commune LIMIT 10 OFFSET 5 (pour renvoyer les enregistrements de 6 à 15)

SELECT cast(x_commune as real) FROM commune LIMIT 1 renvoie 478935.0

SELECT cast(x_commune as text) FROM commune LIMIT 1 renvoie '478935' c'est à dire une chaîne de caractère, puisque entre ''.

PotsgreSQL propose une notation compacte sous la forme expr::type

exemple : SELECT x_commune :: real FROM commune

Une opération de transtypage est parfois nécessaire pour obtenir le résultat souhaité, en particulier avec SpatiaLite. Prenons l'exemple de calcul d'un indicateur (ratio de deux entiers) avec SpatiaLite.

Exemple : SELECT (population/superficie) AS densite FROM commune LIMIT 10

renvoie :

non utilisation du cast avec spatialite

Ce résultat est inattendu !

Il est dû au fait que dans SpatiaLite, le résultat de la division de deux entiers est un entier.

Pour obtenir un résultat satisfaisant il faut au minimum convertir le numérateur ou le dénominateur en flottant:

SELECT cast(population as float)/superficie AS densite FROM commune LIMIT 10

On remarquera à nouveau l'utilisation de LIMIT qui permet d'indiquer le nombre maximum d'enregistrements retournés... c'est une clause très utile pour la mise au point de requêtes sur des grosses tables ou pour récupérer juste le premier enregistrement après un tri.

Le résultat devient bien celui attendu :

Utilisation de la fonction cast

Fonctions de chaînes de caractères :

LENGTH : renvoie la longueur d'une chaîne

exemple : SELECT length(nom_comm) FROM commune

CHR : renvoie le caractère correspondant au code ASCII (exemple CHR(184) renvoi ©)

|| : concatène deux chaînes (on obtient ce symbole en tapant ALTGr 6)

exemple : SELECT nom_comm|| ' '||insee_comm FROM commune LIMIT 1

renvoie 'SAINT-JEAN-DE-LA-MOTTE 72291'

SUBSTR : extraction d'une sous-chaîne de caractères substr(chaîne, position , longueur)

Exemple : SELECT * FROM troncon_hydrographique WHERE substr(ID_BDCARTO, 1, 3) = '239'

sélectionne tout les tronçons dont l'identifiant commence par '239'

UPPER : convertit en majuscule

LOWER : convertit en minuscule

exemple : SELECT lower(nom_comm) FROM commune renvoie les noms de communes en minuscules.

Fonctions mathématiques et numériques :

SQL dispose des fonctions mathématiques classiques... notons en particulier :

POW : pour élever à une puissance quelconque ex : POW(champ, 2) pour élever au carré.

SQRT : pour obtenir la racine carrée.

ROUND : qui permet d'arrondir un résultat

exemple : SELECT round(cast(population AS float)/superfice,2) AS densite FROM commune

renvoie :

fonction round

Remarque

sous PostGIS on écrira SELECT (round (population/superficie) :: numeric, 2) AS densite FROM commune

le :: étant une forme compacte sous PostGIS pour réaliser le cast. Le format numérique (numeric) étant obligatoire pour la fonction round sous PostGIS.

ComplémentSites de références pour les fonctions SQL dans spatialite et PostGIS

Les principales fonctions disponibles sous SpatiaLite sont décrites ici

Les fonctions de PostgreSQL 9.6 sont décrites ici

Nous vous conseillons vivement de parcourir une première fois ces sites et d'y revenir régulièrement par la suite...