- 1 1. Obtenir l’heure actuelle dans MySQL (En bref : la feuille de triche SQL la plus courte)
- 1.1 1.1 Date et heure actuelles MySQL : NOW() / CURRENT_TIMESTAMP
- 1.2 1.2 Date actuelle MySQL : CURDATE()
- 1.3 1.3 Heure actuelle MySQL : CURTIME()
- 1.4 1.4 Heure UTC actuelle MySQL : UTC_TIMESTAMP()
- 1.5 1.5 Heure actuelle MySQL avec millisecondes : NOW(3) / CURRENT_TIMESTAMP(3)
- 1.6 1.6 Feuille de triche rapide par objectif
- 1.7 Résumé des pièges courants
- 2 2. Différences entre MySQL NOW() et CURRENT_TIMESTAMP
- 3 5. Calculer les différences de date/heure dans MySQL (DATEDIFF / TIMESTAMPDIFF)
- 4 6. Requêtes de plage de dates en utilisant l’heure actuelle
1. Obtenir l’heure actuelle dans MySQL (En bref : la feuille de triche SQL la plus courte)
Si vous souhaitez obtenir l’heure actuelle dans MySQL, il n’y a que quelques fonctions SQL à retenir.
Voici la réponse la plus courte pour le mot‑clé de recherche « MySQL get current time ».
1.1 Date et heure actuelles MySQL : NOW() / CURRENT_TIMESTAMP
Renvoie la date + heure actuelle (YYYY-MM-DD HH:MM:SS).
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
Exemple de sortie
2025-02-01 15:30:45
NOW()etCURRENT_TIMESTAMPrenvoient généralement le même résultat.- Les deux renvoient la date et l’heure actuelles.
- Si vous avez besoin de millisecondes, utilisez ce qui suit.
SELECT NOW(3);
Notes (erreurs courantes)
- Dépend du paramètre de fuseau horaire du serveur.
- Dans un environnement UTC, vous pouvez obtenir l’UTC au lieu de l’heure du Japon.
- Pendant l’exécution de la requête, il renvoie essentiellement la même heure (fixée pendant une seule instruction).
1.2 Date actuelle MySQL : CURDATE()
Renvoie uniquement la date (pas d’heure).
SELECT CURDATE();
Exemple de sortie
2025-02-01
Cas d’utilisation
- Interroger les données d’aujourd’hui
- Comparaisons de dates (par ex., filtrer uniquement les enregistrements d’aujourd’hui)
Notes
- La valeur renvoyée est de type
DATE. - Inadapté lorsqu’un traitement de l’heure du jour est nécessaire.
1.3 Heure actuelle MySQL : CURTIME()
Renvoie uniquement l’heure.
SELECT CURTIME();
Exemple de sortie
15:30:45
Cas d’utilisation
- Vérifications des heures d’ouverture
- Logique conditionnelle selon une fenêtre horaire
Notes
- N’inclut pas d’information de date.
- Ne peut pas être utilisé pour comparer avec des colonnes de type
DATE.
1.4 Heure UTC actuelle MySQL : UTC_TIMESTAMP()
Renvoie l’heure en UTC (Temps Universel Coordonné), quel que soit le paramètre de fuseau horaire du serveur.
SELECT UTC_TIMESTAMP();
Exemple de sortie
2025-02-01 06:30:45
Quand l’utiliser
- Services globaux
- Conceptions qui stockent les journaux en UTC de manière cohérente
Erreurs courantes
- Le mélanger avec
NOW()entraîne des décalages horaires - Si l’application suppose le JST, vous verrez une différence de 9 heures
1.5 Heure actuelle MySQL avec millisecondes : NOW(3) / CURRENT_TIMESTAMP(3)
MySQL 5.6 et versions ultérieures prennent en charge les secondes fractionnaires.
SELECT NOW(3);
SELECT CURRENT_TIMESTAMP(3);
Exemple de sortie
2025-02-01 15:30:45.123
Notes pour le stockage
Votre colonne doit également prendre en charge les secondes fractionnaires.
DATETIME(3)
TIMESTAMP(3)
Si vous l’enregistrez dans une colonne qui ne le supporte pas, la partie fractionnaire sera tronquée.
1.6 Feuille de triche rapide par objectif
| Purpose | SQL |
|---|---|
| Current date and time | SELECT NOW(); |
| Get UTC | SELECT UTC_TIMESTAMP(); |
| Date only | SELECT CURDATE(); |
| Time only | SELECT CURTIME(); |
| Get milliseconds | SELECT NOW(3); |
Résumé des pièges courants
- L’heure est décalée parce que vous n’avez pas vérifié le fuseau horaire
- Utiliser
NOW(3)sans une colonne capable de gérer les millisecondes - Mélanger UTC et heure locale
- Ne pas comprendre la différence entre DATETIME et TIMESTAMP

Différence entre MySQL DATETIME et TIMESTAMP (comparaison de la conversion de fuseau horaire)
2. Différences entre MySQL NOW() et CURRENT_TIMESTAMP
NOW() et CURRENT_TIMESTAMP semblent similaires, mais ne pas comprendre où les utiliser et comment ils se comportent peut facilement provoquer des bugs. Ici nous résumons les différences, l’utilisation correcte et les pièges courants.
2.1 Lequel devriez‑vous utiliser ? (utilisation dans SELECT / utilisation dans DEFAULT)
■ Lors de la récupération de la date/heure actuelle dans SELECT
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
Normalement, les deux renvoient le même résultat.
- Ils sont équivalents (synonymes)
- La valeur renvoyée est équivalente à
DATETIME - Affecté par le paramètre de fuseau horaire
En pratique
- Privilégier la lisibilité →
NOW() - Privilégier le style SQL standard →
CURRENT_TIMESTAMP
■ Lors de la définition d’une valeur par défaut de colonne
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Le point clé ici est :
Pour une valeur par défaut, il est courant d’utiliser
CURRENT_TIMESTAMP.
Certains environnements autorisent également NOW(), mais le comportement peut différer selon la version de MySQL et le mode SQL. Le choix le plus sûr est CURRENT_TIMESTAMP.
2.2 Correct usage of DEFAULT / ON UPDATE
Si vous souhaitez mettre à jour automatiquement un horodatage « updated at » :
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
Comportement
- Lors d’un INSERT → définit l’heure actuelle pour
created_at/updated_at - Lors d’un UPDATE → ne met à jour que
updated_at
Erreurs courantes
- Ne pas correspondre à la précision des fractions de seconde lors de l’utilisation de
DATETIME - Être limité par les anciennes restrictions de MySQL avec plusieurs colonnes TIMESTAMP (MySQL 5.6 et antérieur avaient des restrictions)
2.3 Différences entre NOW() et SYSDATE() (Important)
Le point facile à manquer est la différence avec SYSDATE().
SELECT NOW(), SYSDATE();
■ Différences de comportement
NOW()→ fixé au moment du démarrage de la requêteSYSDATE()→ renvoie l’heure au moment où il est appelé
Exemple :
SELECT NOW(), SLEEP(3), NOW();
NOW() renvoie la même valeur.
SELECT SYSDATE(), SLEEP(3), SYSDATE();
SYSDATE() montre une différence de 3 secondes.
2.4 Lequel devriez‑vous utiliser ?
| Function | Behavior | Recommended use |
|---|---|---|
| NOW() | Fixed within a query | Logging, consistency-focused |
| SYSDATE() | Call-time value | Precise real-time retrieval |
Pourquoi NOW() est souvent recommandé dans les systèmes réels
- Maintient la cohérence à l’intérieur d’une transaction (un mécanisme qui exécute plusieurs instructions SQL ensemble)
- Plus sûr dans les environnements de réplication
2.5 Idées fausses courantes et problèmes
❌ « NOW() et CURRENT_TIMESTAMP sont exactement les mêmes, donc vous n’avez pas besoin d’y penser. »
→ Les différences peuvent apparaître dans les valeurs par défaut ou le comportement de mise à jour, selon l’environnement.
❌ « SYSDATE() est plus précis, donc c’est toujours mieux. »
→ Cela peut poser des problèmes dans les environnements de réplication.
❌ Ne pas vérifier le fuseau horaire
SHOW VARIABLES LIKE '%time_zone%';
Si vous l’utilisez sans vérifier, vous pouvez obtenir des décalages horaires.
2.6 Bonnes pratiques
- Récupération avec SELECT →
NOW() - Valeur par défaut de colonne →
CURRENT_TIMESTAMP - Mise à jour automatique →
ON UPDATE CURRENT_TIMESTAMP - Axé sur la cohérence → défaut à
NOW() - Conception basée sur UTC →
TIMESTAMP+ stockage en UTC
- MySQL Current Time Formatting (DATE_FORMAT / TIME_FORMAT)
Après avoir récupéré l’heure actuelle dans MySQL, il est très courant de modifier le format d’affichage.
Pour l’intention de recherche « MySQL current time format », la fonction la plus importante à comprendre estDATE_FORMAT().
3.1 MySQL datetime formatting: DATE_FORMAT(NOW(), …)
Syntaxe de base :
sql
SELECT DATE_FORMAT(target_datetime, 'format_string');
Exemple : formater l’heure actuelle
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
Exemple de sortie
2025-02-01 15:30:45
| Spécificateur | Signification | Exemple |
|---|---|---|
| %Y | Année (4 chiffres) | 2025 |
| %m | Mois (2 chiffres) | 02 |
| %d | Jour (2 chiffres) | 01 |
| %H | Heure (24 h) | 15 |
| %h | Heure (12 h) | 03 |
| %i | Minute | 30 |
| %s | Seconde | 45 |
| %p | AM/PM | PM |
3.2 Converting to Japanese-style or 12-hour format
■ Format de style japonais
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
Exemple de sortie :
2025-02-01 15:30
■ Format 12 h + AM/PM
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');
Exemple de sortie :
2025-02-01 03:30:45 PM
3.3 MySQL time-only formatting: TIME_FORMAT()
Une fonction de formatage spécifiquement pour les données de type TIME.
sql
SELECT TIME_FORMAT(CURTIME(), '%H:%i');
Exemple de sortie :
15:30
Remarques
TIME_FORMAT() ne s’applique qu’au type TIME
Pour DATETIME, utilisez DATE_FORMAT()
3.4 String → datetime conversion: STR_TO_DATE()
Pour convertir des données de chaîne en type datetime :
sql
SELECT STR_TO_DATE('2025-02-01 15:30:45', '%Y-%m-%d %H:%i:%s');
Exemple de sortie :
2025-02-01 15:30:45
Erreurs courantes
Incompatibilité de format renvoie NULL
Confondre %m et %c (mois avec zéro devant vs sans zéro)
3.5 Important points in production
❌ Ne comparez pas après formatage
Mauvais exemple :
sql
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = '2025-02-01';
Ceci est non recommandé car les index deviennent inefficaces (dégradation des performances de la requête).
Recommandé :
sql
WHERE created_at >= '2025-02-01' AND created_at < '2025-02-02';
❌ Ne surchargez pas le formatage côté base de données
Dans les applications web, le formatage pour l’affichage est généralement plus flexible côté application.
La base de données doit se concentrer sur le « stockage et le calcul ».
3.6 Formatting with milliseconds
sql
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f');
%f représente les microsecondes (6 chiffres).
Remarque
Si la colonne n’est pas DATETIME(3) ou similaire, la partie fractionnaire sera tronquée.
Disponible dans MySQL 5.6 et versions ultérieures.
3.7 Summary by formatting purpose
| Objectif | Fonction |
|---|---|
| Modifier le format d’affichage | DATE_FORMAT |
| Formatage de l’heure uniquement | TIME_FORMAT |
| Conversion chaîne → datetime | STR_TO_DATE |
| Afficher les millisecondes | %f |
- MySQL Date and Time Addition/Subtraction (DATE_ADD / DATE_SUB)
Même si vous pouvez récupérer l’heure actuelle, vous ne pouvez pas l’utiliser efficacement en production sans calculs de date/heure tels que « X jours plus tard » ou « X heures auparavant ».
Nous expliquons ici comment utiliserDATE_ADD()etDATE_SUB()avec l’heure actuelle dans MySQL.
4.1 MySQL datetime addition: DATE_ADD()
Syntaxe de base :
sql
SELECT DATE_ADD(base_datetime, INTERVAL value unit);
Exemple : 7 jours à partir de maintenant
sql
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
Exemple : 2 heures plus tard
sql
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR);
| Unité | Signification |
|---|---|
| SECOND | Secondes |
| MINUTE | Minutes |
| HOUR | Heures |
| DAY | Jours |
| MONTH | Mois |
| YEAR | Années |
4.2 MySQL datetime subtraction: DATE_SUB()
Syntaxe de base :
sql
SELECT DATE_SUB(base_datetime, INTERVAL value unit);
Exemple : il y a 30 jours
sql
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
Exemple : il y a 1 heure
sql
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);
Cas d’utilisation
Vérifications d’expiration
Suppression d’anciens journaux
Extraction de données récentes
4.3 Common production patterns
■ Récupérer les données des dernières 24 heures
sql
SELECT * FROM logs WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
■ Définir une échéance 7 jours plus tard
sql
INSERT INTO tasks (deadline) VALUES (DATE_ADD(NOW(), INTERVAL 7 DAY));
4.4 Erreurs courantes et précautions
❌ Appliquer des fonctions aux colonnes
Mauvais exemple :
WHERE DATE(created_at) = CURDATE();
Cela désactive les index (optimisation des performances des requêtes).
Recommandé :
WHERE created_at >= CURDATE() AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
❌ Ignorer les fuseaux horaires
NOW() se base sur le fuseau horaire du serveur
Si vous stockez en UTC, utilisez UTC_TIMESTAMP() comme base
Exemple :
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL 1 DAY);
❌ Pièges de l’ajout de mois
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);
→ En raison de l’ajustement de fin de mois, la date peut changer.
(Le résultat peut devenir 2025‑02‑28 selon l’environnement.)
Comprenez la spécification avant d’utiliser des calculs basés sur les mois.
4.5 Ajout avec millisecondes
SELECT DATE_ADD(NOW(3), INTERVAL 500 MILLISECOND);
※ MySQL ne supporte pas directement MILLISECOND.
Spécifiez en microsecondes :
SELECT DATE_ADD(NOW(3), INTERVAL 500000 MICROSECOND);
4.6 Bonnes pratiques
Standardisez sur NOW() ou UTC_TIMESTAMP() comme base
Ne pas appliquer de fonctions aux colonnes dans la clause WHERE
Comprendre le comportement de l’ajout basé sur les mois
Si une précision est requise, utilisez DATETIME(3) ou supérieur
5. Calculer les différences de date/heure dans MySQL (DATEDIFF / TIMESTAMPDIFF)
Dans les systèmes de production, récupérer simplement l’heure actuelle n’est pas suffisant. Vous avez souvent besoin de calculer combien de jours se sont écoulés ou combien d’heures restent.
5.1 Calcul des différences de dates : DATEDIFF()
DATEDIFF() calcule la différence en jours entre deux dates.
SELECT DATEDIFF('2025-02-10', '2025-02-01');
Résultat
9
Points clés
- Retourne la différence en jours uniquement
- La partie temps est ignorée
- Le résultat peut être négatif
Exemple : calculer les jours depuis la création
SELECT DATEDIFF(NOW(), created_at)
FROM users;
5.2 Calcul des différences par unité : TIMESTAMPDIFF()
TIMESTAMPDIFF() vous permet de spécifier l’unité.
SELECT TIMESTAMPDIFF(unit, start_datetime, end_datetime);
Exemple : différence en heures
SELECT TIMESTAMPDIFF(HOUR, '2025-02-01 10:00:00', '2025-02-01 15:00:00');
Résultat
5
Unités courantes
| Unit | Meaning |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| MONTH | Months |
| YEAR | Years |
Exemple : calculer les minutes depuis la connexion
SELECT TIMESTAMPDIFF(MINUTE, login_at, NOW())
FROM users;
5.3 Cas d’utilisation en production
- Vérifications de timeout de session
- Vérifications d’expiration d’abonnement
- Calcul du temps écoulé dans les journaux
- Logique de limitation de débit
5.4 Erreurs courantes
❌ Utiliser DATEDIFF quand la précision temporelle est requise
DATEDIFF() ignore les heures et les minutes.
❌ Inverser l’ordre des arguments
L’ordre est :
TIMESTAMPDIFF(unit, start, end)
Si inversé, le résultat devient négatif.
❌ Ignorer les fuseaux horaires
En mélangeant UTC et heure locale, les différences peuvent être incorrectes.
5.5 Bonnes pratiques
- Utilisez
TIMESTAMPDIFF()lorsque la précision temporelle compte - Utilisez
DATEDIFF()pour les calculs simples en jours - Assurez une utilisation cohérente des fuseaux horaires
- Standardisez sur UTC dans les systèmes distribués
6. Requêtes de plage de dates en utilisant l’heure actuelle
L’une des exigences réelles les plus courantes est de récupérer les enregistrements dans une plage de temps spécifique, comme :
- Les enregistrements d’aujourd’hui
- Les 7 derniers jours
- Les dernières 24 heures
- Ce mois‑ci
6.1 Récupérer les enregistrements d’aujourd’hui (compatible avec les index)
SELECT *
FROM logs
WHERE created_at >= CURDATE()
AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
Pourquoi c’est correct
- Aucune fonction n’est appliquée à la colonne
- Les index restent utilisables
- Requête de plage efficace
6.2 Les 7 derniers jours
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);
6.3 Les dernières 24 heures
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
6.4 Ce mois‑ci
SELECT *
FROM logs
WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND created_at < DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH);
Dans les systèmes de production, il est souvent préférable de calculer les limites côté application et de les transmettre en tant que paramètres.
6.5 Erreurs de performance courantes
❌ Appliquer des fonctions aux colonnes indexées
WHERE DATE(created_at) = CURDATE();
Cela empêche l’utilisation des index et entraîne des scans complets de la table.
❌ Utiliser BETWEEN imprudemment
BETWEEN est inclusif et peut provoquer des problèmes d’écart d’une seconde.
6.6 Résumé des meilleures pratiques
- Utilisez toujours des conditions de plage pour le filtrage des dates
- Évitez d’appliquer des fonctions aux colonnes indexées
- Privilégiez le stockage en UTC dans les systèmes globaux
- Soyez explicite concernant les hypothèses de fuseau horaire


