C'est peut-être assez con à dire, mais M@teo ne dit à aucun moment qu'il existe des fonctions aussi dans MySQL. Le seul soupçon que vous pourriez avoir par rapport à leur existence était le moment où vous avez appris à compter le nombre de lignes avec COUNT(col).
Il existe une floppée de fonctions MySQL telles que COUNT, certaines agissant sur des chaînes de caractères, d'autres sur des nombres, d'autres sur des dates, certaines sur les colonnes d'une table,...
Comme nous ne travaillons pas sur des tables, nous nous passerons pour le moment de la dernière catégorie, je vous apprendrai dans cette sous-partie les fonctions principales ainsi que leur utilité. Bonne lecture !
UPPER / LOWER
Exemple
Code : SQL | SELECT UPPER('C''est un assassinat !!') AS majs, LOWER('NON ?') AS mins;
|
Effets
UPPER met une chaîne en majuscules et LOWER met une chaîne en minuscules. Seuls les caractères alphabétiques sont pris en compte.
Utilisation
Plusieurs utilisations, dont certaines sont contre-indiquées :
- On utilise souvent UPPER() ou LOWER() pour comparer deux chaînes quand on ne veut pas faire attention à la casse (c'est à dire ne pas tenir compte des minuscules / majuscules). Mais il est préférable d'utiliser un autre charset se terminant par _ci (case insensitive). La plupart du temps c'est déjà le cas et vous ne devez même pas vous en préoccuper.
- UPPER et LOWER sont aussi parfois utilisés pour uniformiser des chaînes de caractères (par exemple NOM Prénom). L'exemple le plus courant étant de mettre un nom en majuscules et un prénom en minuscules sauf la première lettre en majuscule.
CHAR_LENGTH
Exemple
Code : SQL | SELECT CHAR_LENGTH('Bonjour tout le monde !!');
SELECT CHAR_LENGTH('Il l''a');
|
Effets
CHAR_LENGTH renvoie le nombre de caractères contenus dans une chaîne.
La fonction LENGTH sert à la même chose mais tient compte des caractères codés sur 2 octets ! Attention donc aux surprises avec LENGTH que je vous déconseille d'utiliser !
Utilisation
CHAR_LENGTH peut être utilisé comme une vérification (vérifier qu'un pseudo ne contient pas plus de n caractères, etc). Vous allez me dire qu'on peut faire ça du côté PHP, mais moi je trouve ça plus facile du côté SQL, on va dire : "Chacun ses goûts"

.
CONCAT et CONCAT_WS
Exemple
Code : SQL | SELECT CONCAT('Bon', 'jour'), CONCAT_WS(' - ', 1, 2, 3, 4, 5);
|
Effets
Joindre deux chaînes

.
La norme SQL prévoit deux moyens pour concaténer : CONCATENATE et l'opérateur || (l'opérateur étant plus largement utilisé). Par exemple, sous PostGreSQL :
MySQL ne suit pas la norme et crée une autre fonction : CONCAT.
L'opérateur || n'existe tout simplement pas en MySQL, enfin si il existe, mais il ne sert pas du tout à concaténer

.
Utilisation
Imaginez que vous avez créé un forum où on peut entrer son nom et son prénom. Vous avez stocké ces données dans deux champs distincts. Dans un tableau HTML, vous n'allez tout de même pas écrire le nom et le prénom dans deux colonnes différentes

. Donc vous utilisez CONCAT.
CONCAT_WS est moins connu mais parfois très utile ! Il permet de concaténer des chaînes mais d'insérer entre chaque chaîne des caractères. On en reparlera dans le chapitre sur les variables utilisateur

.
LEFT / RIGHT / SUBSTRING
Exemple
Code : SQL | SELECT LEFT('bonjour', 3) AS gauche3, RIGHT('bonjour', 1) AS droite1, SUBSTRING('Bonjour' FROM 2 FOR 3) AS souschaine23;
|
Effets
LEFT('chaine', n) prend n caractères de 'chaine' en partant de la gauche.
RIGHT('chaine', n) prend n caractères de 'chaine' en partant de la droite.
SUBSTRING('chaine' FROM m FOR n) prend n caractères de 'chaine' en partant du caractère m.
Utilisations
Vous vous souvenez de ce qu'on a dit avec UPPER et LOWER à propos du formatage de nom / prénom ? Eh bien maintenant vous savez le faire

.
Essayez de trouver la requête vous-même, puis regardez la solution

.
Note : les données sont dans deux champs différents, rassemblez-les en un seul histoire d'augmenter un (tout petit) peu la difficulté

. Résultat à obtenir : NOM Prénom à partir de Nom prenoM

.
Secret (cliquez pour afficher)Code : SQL | SELECT CONCAT(UPPER('nom'), ' ', UPPER(LEFT('prenoM', 1)), LOWER(SUBSTRING('prenoM' FROM 2)));
|
Quelques fonctions mathématiques...
Les fonctions mathématiques s'utilisent pour faire des mathématiques, qui sont des outils universels et utilisables presque partout. Inutile de vous faire une liste de toutes les possibilités qu'elles offrent. Voici un tableau assez éloquent selon moi :
| Fonction | Description | Résultat |
|---|
| CEIL(2.318) |
Arrondit à l'entier supérieur |
3 |
| FLOOR(1.942) |
Arrondit à l'entier inférieur |
1 |
| ROUND(1.452, 2) |
Arrondit 1.452 à 2 décimales. On peut arrondir un nombre négatif. |
1.45 |
| SIN(0), COS(0), TAN(0), COT(0) |
Donne les sinus, cosinus, tangente et cotangente de 0 (angle exprimé en radians). |
0, 1, 0, NULL |
| ASIN(0), ACOS(0), ATAN(0) |
Donne les arcsinus,... de 0 (l'intervalle va de -1 à 1 pour ASIN et ACOS). |
0, 1.5707963267949, 0 |
| PI() |
Donne la valeur de Pi. |
3.141593 |
| DEGREES(1) |
Convertit 1 radian en degrés |
57.295779513082 |
| RADIANS(60) |
Convertit 60 degrés en radians |
1.0471975511966 |
| RAND() |
Renvoie un nombre aléatoire entre 0 et 1 |
0.54017342584224 |
| SQRT(4) |
Renvoie la racine carrée de 4 |
2 |
NOW() / CURRENT_TIME() / CURRENT DATE()
Exemple
Code : SQL | SELECT NOW(), CURRENT_DATE(), CURRENT_TIME();
|
Effets
NOW() renvoie le timestamp (pas le timestamp UNIX) actuel, CURRENT_TIME() renvoie l'heure et CURRENT_DATE() la date.
Utilisations
Ces valeurs sont très utiles dans les valeurs par défaut de certains champs dans certaines tables. Par exemple, si vous faites un script de news et que vous stockez la date à laquelle a été postée la news, mettre NOW() comme valeur par défaut du champ concerné est une technique fortement conseillée

.
FROM_UNIXTIME() / UNIX_TIMESTAMP()
Exemple
Code : SQL | SELECT FROM_UNIXTIME(1144835054), UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP();
|
Effets
FROM_UNIXTIME() vous permet de passer d'un timestamp UNIX (par exemple obtenu par PHP) à un timestamp SQL (mieux adapté aux bases de données). Il est déconseillé de stocker des timestamps UNIX dans une BDD, c'est pourquoi ces fonctions existent pour permettre une conversion simple et efficace.
UNIX_TIMESTAMP() vous permet de revenir à un format UNIX ou d'obtenir le timestamp UNIX actuel si aucune date n'est spécifiée en argument. Normalement, cette fonction ne devrait jamais être utilisée : PHP ne devrait plus avoir à traiter des variables de type DATETIME après une requête SQL ; il vaut mieux traiter les dates dans la requête SQL via DATE_FORMAT(), GET_FORMAT() et EXTRACT() (voir juste en dessous).
Utilisation
Ces fonctions servent à stocker une date provenant de PHP dans une BDD au format date SQL. Elles permettent également de revenir à un timestamp UNIX, mais comme ça a déjà été dit, il vaut mieux ne plus traiter de dates du côté de PHP.
DATE_FORMAT() / GET_FORMAT() / EXTRACT()
Exemple
Code : SQL | SELECT DATE_FORMAT(CURRENT_DATE(), GET_FORMAT(DATE, 'EUR')) AS today,
DATE_FORMAT(NOW(), '%d.%m.%Y') AS today2,
CONCAT_WS('.', EXTRACT(DAY FROM NOW()), EXTRACT(MONTH FROM NOW()), EXTRACT(YEAR FROM NOW())) AS today3;
|
Effets
DATE_FORMAT() permet de formater une date selon divers formats fournis soit par vous-même (le truc bizarre avec les signes %), soit par GET_FORMAT(). Toutes les options disponibles pour ces deux options peuvent être trouvées sur cette page (je vais pas copier la doc non plus

) :
Utilisation
Ces fonctions sont utilisées pour rendre des dates au format français, c'est très pratique et ça permet de ne pas devoir intervenir du côté PHP. A préférer aux fonctions UNIX (et donc au traitement du côté PHP).
Et voilà, bien sûr, il existe beaucoup plus de fonctions dans MySQL, mais je crois vous avoir donné les principales, et en tout cas les plus utiles

.