Pour insérer une date en SQL, écris-la dans ton instruction INSERT sous forme de chaîne 'YYYY-MM-DD', ou utilise une fonction comme CURRENT_DATE pour la date du jour. Les exemples fonctionnent avec PostgreSQL, MySQL, SQLite et SQL Server.
Comment insérer une date en SQL
Écris la date sous forme de chaîne au format 'YYYY-MM-DD'. Si la colonne est de type date, la base de données convertit la chaîne en date :
INSERT INTO table_name (date_column) VALUES ('YYYY-MM-DD');
INSERT INTO orders (order_id, customer, order_date)
VALUES (2, 'Tom', '2021-06-15');
Pour une colonne TIMESTAMP ou DATETIME, ajoute l’heure après un espace, au format 24 heures :
INSERT INTO flights (flight_no, departs_at)
VALUES ('UA 940', '2026-11-02 17:45:00');
-- In SQL Server, make departs_at a DATETIME2: its TIMESTAMP type isn't a date
Pour la date du jour, mets CURRENT_DATE à la place de la chaîne, sans guillemets. CURRENT_TIMESTAMP donne la date et l’heure :
INSERT INTO orders (order_id, customer, order_date)
VALUES (3, 'Priya', CURRENT_DATE);
-- In SQL Server, use CAST(GETDATE() AS DATE): it has no CURRENT_DATE
-- Output (the new row, run on 2026-10-13):
-- order_id | customer | order_date
-- ---------+----------+-----------
-- 3 | Priya | 2026-10-13
Règles à connaître
-
Tiens-t’en à
'YYYY-MM-DD'. Les autres formats dépendent des paramètres de la base de données. PostgreSQL et SQL Server lisent'06/15/2021'comme mois/jour/année, et MySQL le rejette :
INSERT INTO orders (order_id, customer, order_date) VALUES (4, 'Ana', '06/15/2021');
-- MySQL: ERROR 1292 (22007): Incorrect date value: '06/15/2021' for column 'order_date' at row 1
-
SQLite ne vérifie pas les dates. Il n’a pas de type date et stocke n’importe quel texte que tu lui donnes. Ses fonctions de date ne savent pas lire
'06/15/2021', et elles reportent'2021-02-30'au2021-03-02. -
Le
TIMESTAMPde MySQL ne couvre que 1970 à 2038. UtiliseDATETIMEpour les anniversaires, les dates historiques et tout ce qui est loin dans le futur :
-- MySQL
CREATE TABLE people (name VARCHAR(50), born_at TIMESTAMP);
INSERT INTO people (name, born_at) VALUES ('Ada Lovelace', '1815-12-10 00:00:00');
-- ERROR 1292 (22007): Incorrect datetime value: '1815-12-10 00:00:00' for column 'born_at' at row 1
- « Maintenant » est dans le fuseau horaire de la base de données (toujours UTC dans SQLite). Si tes utilisateurs sont répartis sur plusieurs fuseaux horaires, stocke en UTC.
Syntaxe alternative
Tu croiseras aussi les noms propres à chaque base de données pour aujourd’hui et maintenant :
- MySQL :
CURDATE()etNOW(). PostgreSQL a aussiNOW(). - SQLite :
date('now')etdatetime('now'). - SQL Server :
CAST(GETDATE() AS DATE)etGETDATE(). Il n’a pas deCURRENT_DATE, donc la date du jour nécessite le cast.
Quand dois-tu insérer une date ?
La plupart des insertions de dates correspondent à l’un de ces cinq cas, et chacun a son propre outil.
Enregistrer une date que tu connais déjà
Les anniversaires, échéances et rendez-vous viennent d’une personne ou d’un formulaire. Saisis-les sous forme de chaînes 'YYYY-MM-DD'.
Horodater avec la date du jour ou l’heure actuelle
Les dates de commande, d’inscription et les journaux d’audit doivent venir de l’horloge de la base de données, pas d’une valeur saisie par quelqu’un. Utilise CURRENT_DATE ou CURRENT_TIMESTAMP (GETDATE() dans SQL Server), ou fais-en la valeur par défaut de la colonne.
Stocker une heure en plus d’une date
Les réunions, vols et entrées de journal ont aussi besoin de l’heure. Utilise une colonne DATETIME ou TIMESTAMP et écris 'YYYY-MM-DD HH:MM:SS'.
Calculer une date à partir d’une autre
Les échéances, renouvellements et rappels tombent un certain temps après une autre date. Laisse la base de données faire le calcul : + INTERVAL dans PostgreSQL et MySQL, DATEADD() dans SQL Server et date() avec un modificateur dans SQLite.
Charger des dates écrites dans un autre format
Les tableurs et exports CSV contiennent souvent des dates comme 06/15/2021. Convertis-les à l’insertion : STR_TO_DATE() dans MySQL, TO_DATE() dans PostgreSQL et CONVERT() avec un numéro de style dans SQL Server. SQLite ne sait pas analyser d’autres formats, alors réorganise le texte avec substr().
Exemples concrets d’insertion de dates
Ajouter plusieurs dates en une seule instruction
Une liste de jours fériés s’insère avec un seul INSERT et une ligne de valeurs par date :
INSERT INTO holidays (holiday_name, holiday_date)
VALUES
('Independence Day', '2026-07-04'),
('Thanksgiving', '2026-11-26'),
('Christmas Day', '2026-12-25');
Remplir la date du jour avec une valeur par défaut
Donne une valeur par défaut à la colonne et chaque INSERT qui l’omet reçoit la date du jour. MySQL exige les parenthèses autour de CURRENT_DATE :
CREATE TABLE orders (
order_id INT,
customer_id INT,
order_date DATE DEFAULT (CURRENT_DATE) -- SQL Server: DEFAULT CAST(GETDATE() AS DATE)
);
INSERT INTO orders (order_id, customer_id) VALUES (1, 42);
-- Output (the new row, run on 2026-10-13):
-- order_id | customer_id | order_date
-- ---------+-------------+-----------
-- 1 | 42 | 2026-10-13
Enregistrer l’heure locale d’une réunion en UTC
Quelqu’un à New York réserve une réunion à 9 h 30, heure locale. Convertis-la en UTC à l’insertion pour que les heures de tout le monde concordent :
INSERT INTO meetings (title, starts_at_utc)
VALUES ('Design review', TIMESTAMP '2026-10-20 09:30:00' AT TIME ZONE 'America/New_York' AT TIME ZONE 'UTC');
-- MySQL (once its time zone tables are loaded):
-- CONVERT_TZ('2026-10-20 09:30:00', 'America/New_York', 'UTC')
-- SQL Server:
-- CAST('2026-10-20 09:30:00' AS DATETIME2) AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC'
-- Output (the new row):
-- title | starts_at_utc
-- --------------+--------------------
-- Design review | 2026-10-20 13:30:00
SQLite n’a pas de fuseaux horaires nommés, donc fais la conversion dans ton application avant l’insertion.
Fixer une date de renouvellement un mois plus tard
Un abonnement se renouvelle un mois après son début. Calcule la date de renouvellement dans l’INSERT :
INSERT INTO subscriptions (customer, started_on, renews_on)
VALUES ('Tom', '2026-10-13', DATE '2026-10-13' + INTERVAL '1' MONTH);
-- SQL Server: DATEADD(month, 1, '2026-10-13')
-- SQLite: date('2026-10-13', '+1 month')
-- Output (the new row):
-- customer | started_on | renews_on
-- ---------+------------+-----------
-- Tom | 2026-10-13 | 2026-11-13
Attention à la fin du mois dans SQLite. À partir du 31 janvier, il déborde sur mars, là où les autres bases de données s’arrêtent au 28 février :
SELECT date('2026-01-31', '+1 month');
-- Output: 2026-03-03
Importer des dates jour/mois/année
Un fournisseur envoie des factures datées à la britannique, 15/06/2021. Indique le format à la base de données lors de l’insertion :
INSERT INTO invoices (invoice_no, issued_on)
VALUES ('INV-1002', TO_DATE('15/06/2021', 'DD/MM/YYYY'));
-- MySQL: STR_TO_DATE('15/06/2021', '%d/%m/%Y')
-- SQL Server: CONVERT(date, '15/06/2021', 103), where style 103 is dd/mm/yyyy
-- SQLite can't parse dates: rearrange the text with substr()
-- Output (the new row):
-- invoice_no | issued_on
-- -----------+-----------
-- INV-1002 | 2021-06-15
Pour aller plus loin sur l’insertion de dates
Sur ce blog :
- Guide du format de date en SQL : affiche les dates stockées dans le format dont tu as besoin
- Guide de SQL DATEDIFF : compte les jours, mois ou années entre deux dates
- L’instruction SQL INSERT : la syntaxe d’INSERT elle-même
- Guide de SQL CREATE TABLE : colonnes de date, valeurs par défaut et contraintes
-
Formater les dates dans PostgreSQL : les types de date de PostgreSQL et
TO_CHAR - Importer des données CSV dans SQL Server avec BULK INSERT : charger des fichiers exportés, dates comprises
Documentation officielle :
- PostgreSQL : types date/heure
- MySQL : les types DATE, DATETIME et TIMESTAMP
- SQLite : fonctions de date et d’heure
- SQL Server : types de données et fonctions de date et d’heure
Beekeeper Studio est une interface de base de données gratuite & open source
Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.
Ce que les utilisateurs disent de Beekeeper Studio
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable. »
« J’ai essayé beaucoup d’interfaces de bases de données, mais Beekeeper trouve le parfait équilibre entre fonctionnalités et simplicité. Ça marche, tout simplement. »