Question 1Lequel de ces résultats est correct pour SELECT 10 % 3; ?
Fonctions ① — Arithmétique, Concaténation de chaînes et Fonctions de date
Le premier des trois articles sur les fonctions SQL. Couvre les opérateurs arithmétiques + - * / %, la concaténation de chaînes avec || et CONCAT, et les fonctions de date comme l'horodatage actuel et l'extraction d'année / mois — le tout sur un jeu de données staff chargé depuis un CSV.
Données utilisées dans cet article — la table staff
À partir de cet article, les trois suivants couvrent les fonctions intégrées à SQL. Le premier se concentre sur trois catégories : opérations arithmétiques, concaténation de chaînes et fonctions de date — toutes des expressions que tu placeras généralement dans la liste de colonnes d'un SELECT.
Le jeu de données est la table staff (10 lignes : id / name / birthday / city / salary), chargée automatiquement depuis un CSV. À travers quatre exercices pratiques, tu feras du calcul monétaire avec salary, construiras des libellés à partir de name et city, et formateras des dates depuis birthday.
Opérateurs arithmétiques — +, -, *, /, %
Pour les calculs sur les colonnes numériques, tu disposes des 5 opérateurs arithmétiques + - * / %. SQL te permet d'écrire des expressions directement dans la liste de colonnes du SELECT, donc tu peux prendre une valeur d'une table et renvoyer son résultat calculé comme colonne séparée. Ajouter AS alias donne un nom à la colonne résultat, ce qui facilite l'affichage ou la consommation par le code en aval.
La division / se comporte différemment selon les bases : pour les divisions entre entiers, certaines bases (PostgreSQL / SQL Server) renvoient un résultat entier, tandis que d'autres (MySQL / la console de ce cours = SQLite) renvoient automatiquement un décimal.
-- 1) Calculs simples sans table
SELECT 1 + 1; -- 2
SELECT 10 - 3; -- 7
SELECT 3 * 4; -- 12
SELECT 10.0 / 3; -- 3.333...
SELECT 10 % 3; -- 1
-- 2) Calcul utilisant une colonne (salaire annuel après une augmentation de 10%)
SELECT name, salary, salary * 1.1 AS next_year_salary
FROM staff;
-- 3) Calculer le salaire mensuel (annuel / 12)
SELECT name, salary / 12 AS monthly_salary FROM staff;
+ - * / % ont la même signification que dans la plupart des langages de programmation.Concaténation de chaînes — `||` et `CONCAT()`
Joindre plusieurs chaînes en une seule s'appelle la concaténation. Il y a deux façons de l'écrire : la console de ce cours (SQLite), PostgreSQL, Oracle et SQL Server utilisent l'opérateur `||` (deux barres verticales), tandis que MySQL utilise la fonction `CONCAT()`. SQLite supporte en fait les deux || et CONCAT(), donc cet article s'appuie sur la fonction CONCAT() plus portable.
En insérant un séparateur (': ' ou ' / ') entre les valeurs, tu peux réduire name et city en une seule colonne lisible comme « Alice Tanaka / Tokyo ». C'est un outil de prédilection pour les rapports et exports CSV où tu veux « plusieurs colonnes fusionnées en une seule ».
-- 1) L'opérateur || (SQLite / PostgreSQL / Oracle)
SELECT name || ' (' || city || ')' AS label FROM staff;
-- 2) La fonction CONCAT (MySQL / SQLite 3.40+ / PostgreSQL)
SELECT CONCAT(name, ' (', city, ')') AS label FROM staff;
-- Les deux renvoient le même résultat
-- → Alice Tanaka (Tokyo) / Bob Suzuki (Osaka) / ...
`||` vs. `CONCAT()` — lequel choisir
Pour la portabilité, `CONCAT()` est le choix le plus sûr. Elle fonctionne sur SQLite, MySQL, PostgreSQL, SQL Server (2012+) et Oracle. || est le standard SQL, mais en MySQL il signifie par défaut OU logique, donc si la production peut être MySQL, choisir CONCAT() t'évite toute réécriture.
La gestion des NULL diffère aussi : NULL || 'A' renvoie NULL avec l'opérateur ||. CONCAT(NULL, 'A') renvoie une chaîne vide en MySQL mais NULL en PostgreSQL — le comportement varie. Quand NULL peut se glisser dans tes entrées, encapsule-les avec COALESCE(colonne, '') pour convertir NULL en chaîne vide avant la concaténation (COALESCE est couvert dans le troisième article de cette série).
Fonctions de date — horodatage actuel et formatage
Pour des choses comme « marquer l'heure actuelle sur un nouvel enregistrement » ou « extraire juste l'année d'une date de naissance », tu utilises les fonctions de date. Les fonctions de date sont l'une des catégories où les noms et la syntaxe varient le plus entre bases — la console de ce cours (SQLite) et MySQL les appellent assez différemment.
Ce cours utilise datetime('now') / date('now') / strftime('format', valeur) de SQLite pour les exercices, avec NOW() / CURDATE() / DATE_FORMAT(valeur, 'format') de MySQL en parallèle dans la table comparative ci-dessous. Les chaînes de format ('%Y' pour l'année, '%m' pour le mois, '%d' pour le jour, etc.) sont identiques dans les deux bases, donc au moins les spécificateurs de format se transfèrent directement.
-- Comment l'écrire dans la console de ce cours (SQLite)
-- 1) Horodatage actuel / date actuelle
SELECT datetime('now') AS current_dt, date('now') AS current_d;
-- 2) Spécificateur de format (année seule / année-mois)
SELECT strftime('%Y', '1990-04-15') AS year_only; -- '1990'
SELECT strftime('%Y-%m', '1990-04-15') AS year_month; -- '1990-04'
-- 3) Format appliqué à une colonne
SELECT name, strftime('%Y', birthday) AS birth_year FROM staff;
-- Référence : la même chose en MySQL
-- SELECT NOW(), CURDATE();
-- SELECT DATE_FORMAT(birthday, '%Y') FROM staff;
| Objectif | Console de ce cours (SQLite) | MySQL |
|---|---|---|
| Horodatage actuel | datetime('now') | NOW() |
| Date actuelle | date('now') | CURDATE() |
| Extraire l'année | strftime('%Y', d) | DATE_FORMAT(d, '%Y') |
| Format personnalisé | strftime('%Y-%m-%d', d) | DATE_FORMAT(d, '%Y-%m-%d') |
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Dans la console de ce cours, quelle est la bonne manière de combiner name et city en une seule colonne comme Alice Tanaka (Tokyo) ?
Question 3Dans la console de ce cours (SQLite), quelle est la bonne façon d'extraire juste l'année à 4 chiffres d'une colonne birthday ?