Vous êtes sur la page 1sur 34

SQL : Traitement des

données

1
I- Traitement des chaînes de caractères
Et des nombres

2
Traitement des chaînes

Syntaxe générale : nomFonction(colonne1 |


expression1 [,colonne2 | expression2 …])

Ces fonction effectuent une opération sur une valeur de


type chaîne et renvoient une valeur numérique ou de type
chaîne.
Utilisation des fonctions Syntaxe
On peut utiliser les fonctions dans les
différentes clauses des requêtes SQL :
- SELECT FONCTION(a) FROM t;
- SELECT a
FROM t WHERE FONCTION(b) = C;
- SELECT a FROM t
ORDER BY FONCTION(b);

4
Traitement des chaînes

LENGTH: longueur d’une chaîne


• LENGTH() MySQL, PostgreSQL et Oracle
LENGTH() permet de calculer la
• LEN() SQL Server longueur d’une chaîne de
caractères
SELECT LENGTH('exemple') from dual;

Résultat :
7

SELECT LENGTH('Infos-Air : AirBus pour Air-France') "Taille« from dual;


| Taille |
+--------+
| 34 | 5
Exemple
Table utilisateur :
id login ville telephone
1 aa Paris 123
2 paul Lyon 06.00.00.00
.00
3 leolebeau Lyon 060000000
0
4 john Lille 1

SELECT
Connaîtreid,lalogin, LENGTH(login)
longueur du login AS login_length, ville,
telephone FROM utilisateur
id login login_length ville telephone
1 aa 2 Paris 123
2 paul 4 Lyon 06.00.00.00.00
3 leolebea 9 Lyon 0600000000
u
4 john 4 Lille 1
dans where :
Extraire les utilisateur avec un login inférieur à 5
caractères

SELECT id, login, ville, telephone


FROM utilisateur
WHERE LENGTH(login) < 5

Résultat : id login ville telephone


1 aa Paris 123
2 paul Lyon 06.00.00.00
.00
4 john Lille 1
LOWER / UPPER
• Conversion majuscule (UPPER) et minuscule (LOWER)
d’une chaîne de caractères alphabétiques

• Syntaxe :
– UPPER ( chaîne )
– LOWER ( chaîne )

LOWER(c) : Tout en minuscules.

SELECT CONCAT(LOWER(prenom),' ', LOWER(nom))


"Etat civil" +---------------+
FROM Pilote WHERE compa = 'SING'; | Etat civil |
+---------------+
| richard grin |
• UPPER(c) : Tout en majuscules.

SELECT CONCAT(UPPER(prenom),' ',


UPPER(nom)) "Pilotes de CAST"
FROM Pilote WHERE compa = 'CAST';

| Pilotes de CAST |
+------------------+
| PLACIDE FRESNAIS |
| FRANCOISE TORT |
TRIM

• TRIM : supprimer des espaces blancs


Ex : TRIM(c1 FROM c2)
supprimer des caractères au début et en fin d’une chaîne de
caractère

SELECT
TRIM('B' FROM 'BA380 à +----------------+
BlagnacBBBBB') | Bye les Jumbo |
"Bye les Jumbo";
+----------------+
| A380 à Blagnac |
+----------------+
• Suppression des espaces à gauche (LTRIM) ou à droite
(RTRIM) d’une
• chaîne de caractères

• Syntaxe :
– LTRIM ( chaîne )
– RTRIM ( chaîne )

SELECT LTRIM(' Exemple ');


Résultat : 'Exemple '
Exemple id date_ajout contenu
1 2013-07-11 Bonjour, ceci est un
Table message message de test.

2 2013-07-18
Select
Trim(contenu).. Ceci est une réponse avec
des caractères "invisibles"
au début et à la fin.

3 2013-08-02
Encore un autre message.
4 2013-08-29 Dernier message avec un
retour à la ligne.

id date_ajout contenu_trim
1 2013-07-11 Bonjour, ceci est un message de
test.

2 2013-07-18 Ceci est une réponse avec des


Résultats : caractères "invisibles" au début et à
la fin.

3 2013-08-02 Encore un autre message.


4 2013-08-29 Dernier message avec un retour à
la ligne.
REVERSE(c)

• REVERSE : Renvoie l'inverse d'une


expression de type caractère
Syntaxe
SELECT REVERSE( chaine );

SELECT REVERSE('cangalB à 083A')


"Miroir";

+----------------+
| Miroir |
+----------------+
| A380 à Blagnac |
+----------------+
LPAD : permet de compléter une chaîne de caractère
jusqu’à ce qu’elle atteigne la taille souhaitée, en ajoutant
des caractères au début de cette chaîne.
SELECT LPAD('azerty', 4, 'x'); -- retourne 'azer'
SELECT LPAD('azerty', 6, 'x'); -- retourne 'azerty'
SELECT LPAD('azerty', 10, 'x'); -- retourne 'xxxxazerty'
SELECT LPAD('azerty', 10); -- retourne ' azerty' (fonctionne avec
Oracle ou PostgreSQL, mais pas avec MySQL)
SELECT LPAD('azerty', 9, 'xy'); -- retourne 'xyxazerty'
SELECT LPAD('123', 6, '0'); -- retourne '000123'

A noter : par défaut si le troisième paramètre n’est pas


complété la chaîne de complétion sera un espace vide
• Exemple Table “produit”
id nom prix_avec_format
1 Télévision 45500
2 Téléphone 2990
3 Table 12200
4 Fauteuil 3599

SELECT id, nom, prix_avec_format, LPAD(prix_avec_format, 8,


'0') FROM produit

Résultat LPAD(prix_avec_format,
id nom prix_avec_format
8, '0')
1 Télévision 45500 00045500
2 Téléphone 2990 00002990
3 Table 12200 00012200
4 Fauteuil 3599 00003599
REPLACE : permet de remplacer des caractères
alphanumérique dans une chaîne de caractère.
REPLACE(c1,c2,c3) Recherche les c2 présentes dans c1 et
les remplace par c3.
La fonction comporte 3 paramètres :
Chaîne d’entré
Texte à remplacer
Texte qui sert de remplacement

• SELECT REPLACE('Hello tout le monde',


'Hello', 'Bonjour');
• Résultat : Bonjour tout le monde
SELECT +----------------------+
REPLACE('Matra et | Changement |
Aerospatiale', +----------------------+
'Matra','EADS') "Changement"; | EADS et Aerospatiale |
+----------------------+
• REPLACE dans un UPDATE
UPDATE table
SET nom_colonne = REPLACE(nom_colonne, 'ancien
texte', 'texte de remplacement')

REPLACE dans un SELECT

SELECT colonne1, colonne2, REPLACE(colonne3, 'exemple


insulte, 'CENSURE')
FROM table
• Exemple Table site :
id date_ajout site url
1 2013-02-05 Wikipedia http://fr.wikipedia.org/
2 2013-02-11 Google http://www.google.fr/
3 2013-03-16 Facebook http://www.facebook.com/

4 2013-03-16 Facebook http://www.facebook.com/home.php

5 2013-03-16 Facebook http://www.facebook.com/feed/friends


UPDATE site
SET url = REPLACE(url, 'www.facebook.com', 'fr-
fr.facebook.com')
WHERE url LIKE '%www.facebook.com%'
id date_ajout site url
1 2013-02-05 Wikipedia http://fr.wikipedia.org/
2 2013-02-11 Google http://www.google.fr/
3 2013-03-16 Facebook http://fr-fr.facebook.com/
4 2013-03-16 Facebook http://fr-fr.facebook.com/home.php

5 2013-03-16 Facebook http://fr-fr.facebook.com/feed/friends


INSTR : obtenir la position
d’une occurrence dans une chaîne de
caractères.

INSTR(c1,c2) Premier indice d’une sous


chaîne c1 dans une chaîne c2.

Exemple : indice de 'Air‘ dans la chaîne.


+--------+
SELECT INSTR('Infos-Air : | Indice |
AirBus pour Air-France','Air') +--------+
"Indice"; |7 |
+--------+
Traitement des nombres

• Les fonctions numériques utilisent et


ramènent des valeurs numériques.
– ROUND : calculer l’arrondi
SELECT
ROUND(nom_colonne)
FROM `table`

SELECT ROUND(nom_colonne, 2)
FROM `table`
20
Exemple
Table “resultat”
id utilisateur algorithme
1 Thomas 78.4216857
2 Marie 69.1294526
3 Sophie 63.5236241
4 John 24.6578954

SELECT id, utilisateur,


algorithme, ROUND(algorithme)
FROM `resultat` Résul
ROUND(al
id utilisateurtatalgorithme
:
gorithme)
1 Thomas 78.4216857 78
2 Marie 69.1294526 69
3 Sophie 63.5236241 64
4 John 24.6578954 25
• Arrondir à 2 chiffres après la virgules
SELECT id, utilisateur, algorithme, ROUND(algorithme, 2)
FROM `resultat`

Résult
at : ROUND(al
id utilisateur algorithme gorithme,
2)
1 Thomas 78.4216857 78.42
2 Marie 69.1294526 69.13
3 Sophie 63.5236241 63.52
4 John 24.6578954 24.66
RAND() : fonction random

Génère un nombre aléatoire compris entre 0 et 1.

Syntaxe en mysql
SELECT RAND();
0.8702846307962059
0.0648367116831585
0.7657416637667843
En oracle : select dbms_random.value from
table;
• SELECT RAND() * 100;
Résultats possibles :
60.11546427394773
51.26955569839995
15.105471494705855

Exemple Table ville :


id ville departement
1 Paris Paris
2 Marseille Bouches-du-Rhône
3 Lyon Rhône
4 Toulouse Haute-Garonne
5 Nice Alpes-Maritimes
6 Nantes Loire-Atlantique
7 Strasbourg Bas-Rhin
8 Montpellier Hérault
9 Bordeaux Gironde
10 Lille Nord
• Trier les résultats aléatoirement
SELECT * FROM `ville` ORDER BY RAND() : en mysql
SELECT column FROM table ORDER BY dbms_random.value: en oracle
id ville departement
2 Marseille Bouches-du-
Rhône
10 Lille Nord
Trier les résultats
6 Nantes Loire-Atlantique
aléatoirement
7 Strasbourg Bas-Rhin
9 Bordeaux Gironde
1 Paris Paris
5 Nice Alpes-
Maritimes
3 Lyon Rhône
4 Toulouse Haute-Garonne
8 Montpellier Hérault
• Sélectionner un résultat
aléatoirement

SELECT * FROM `ville` WHERE `id` =


ROUND( RAND() * 9 ) + 1

id ville departement
7 Strasbourg Bas-Rhin
Fonctions mathématiques en sql
Conversions
Explicites
• Une conversion est dite « explicite » quand
on utilise une fonction à cet effet.
• Les fonctions de conversion les plus
connues sont CAST et CONVERT (qui
respectent la syntaxe de la norme SQL).
CAST()
convertir une données d’un type en un autre.

Syntaxe
SELECT CAST( expression AS type );
Table client
Exemple id prenom nom date_ajout budget
1 Thierry Jourdain 2013-02-05 14:11:09 314.21
id : BIGINT
prenom : VARCHAR 2 Laurette Bertin 2013-03-15 15:06:45 154.34
nom : VARCHAR
3 André Moreira 2013-08-26 08:24:39 255.47
date_ajout : DATETIME
budget : FLOAT 4 Aurélie Moulin 2013-09-04 11:36:17 147.95

Extraire la date au format DATE


SELECT id, prenom, nom, CAST( date_ajout AS DATE ) AS
date_ajout_cast, budget
FROM client
Résultat : id prenom nom
date_ajout_
budget
cast
1 Thierry Jourdain 2013-02-05 314.21
2 Laurette Bertin 2013-03-15 154.34
3 André Moreira 2013-08-26 255.47
4 Aurélie Moulin 2013-09-04 147.95
• Extraire le budget au format INTEGER
SELECT id, prenom, nom, date_ajout, CAST( budget AS
SIGNED INTEGER ) AS budget_cast FROM client

Résultat
id prenom nom date_ajout budget_cast
1 Thierry Jourdain 2013-02-05 314
14:11:09
2 Laurette Bertin 2013-03-15 154
15:06:45
3 André Moreira 2013-08-26 255
08:24:39
4 Aurélie Moulin 2013-09-04 148
11:36:17
CONVERT()
Syntaxe
CONVERT(expression, type);

Exemple:
SELECT CONVERT(52.2, SIGNED INTEGER); -- résultat : 52
SELECT CONVERT(52.5, SIGNED INTEGER); -- résultat : 53
SELECT CONVERT(52.6, SIGNED INTEGER); -- résultat : 53
SELECT CONVERT(-52.6, SIGNED INTEGER); -- résultat : -53
SELECT CONVERT(52.2, UNSIGNED INTEGER); -- résultat : 52
SELECT CONVERT(52.5, UNSIGNED INTEGER); -- résultat : 53
SELECT CONVERT(52.6, UNSIGNED INTEGER); -- résultat : 53

SELECT CONVERT('2014-11-01', DATETIME); -- résultat :


2014-11-01 00:00:00
Implicites
Il est possible d’affecter, dans une expression ou dans une
instruction SQL (INSERT, UPDATE...), une donnée de type
numérique (ou date-heure) à une donnée de type VARCHAR
(ou CHAR).
Il en va de même pour l’affectation d’une colonne VARCHAR
par une donnée de type date-heure (ou numérique).

conversions implicites.

CREATE TABLE Test (c1 DECIMAL(6,3), c2 DATE, c3


VARCHAR(1), c4 CHAR);
INSERT INTO Test VALUES ('548.45', '20060116', 3, 5);

Vous aimerez peut-être aussi