English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Dates et heures SQL

Dans ce tutoriel, vous apprendrez à utiliser les dates et les heures dans SQL.

Traitement des dates et des heures

En plus des chaînes et des nombres, vous avez souvent besoin de stocker des dates et des/ou valeurs de temps, par exemple, la date de naissance des utilisateurs, la date d'embauche des employés, la date d'un événement futur, la date et l'heure de création ou de modification d'une ligne spécifique dans une table, etc.

Ces types de données sont appelés données temporaires, chaque moteur de base de données a un format de stockage par défaut et un type de données pour les stocker. Le tableau suivant montre les types de données pour traiter les dates et les heures pris en charge par le serveur de base de données MySQL.

TypeFormat prédéfiniValeurs autorisées
DATEYYYY-MM-DD1000-01-01 - 9999-12-31
TEMPSHH:MM:SS ou HHH:MM:SS-838:59:59 - 838:59:59
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 - 9999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 - 2037-12-31 23:59:59
ANNEEYYYY1901 - 2155

Le format de la valeur DATE est YYYY-MM-DD, où YYYY représente l'année entière (4de chiffres), tandis que MM et DD représentent respectivement les parties mois et jour de la date (deux chiffres précédés de zéros). La valeur de temps est généralement au format HH:MM:SS, où HH, MM et SS représentent respectivement les parties heure, minute et seconde du temps.

Les instructions suivantes montrent comment insérer des valeurs de date dans une table de base de données :

INSERT INTO employees (emp_name, hire_date, salary)
VALUES ('Adam Smith', '2015-06-24', 4500);

Attention :Dans MySQL, la valeur de l'heure peut être plus grande car MySQL les considère comme du temps d'exécution. Cela signifie que le type de données 'temps' peut non seulement être utilisé pour représenter une heure d'une journée (doit être inférieur à24heures), et peut également être utilisé pour représenter l'intervalle de temps entre deux événements, qui peut être supérieur à24heures, même négatif.

Suivi du temps de création ou de modification de la ligne

Lorsque l'on utilise une base de données de grand application, il est généralement nécessaire de stocker le temps de création ou la dernière modification des enregistrements dans la base de données, par exemple, le date et l'heure de l'enregistrement de l'inscription de l'utilisateur ou de la dernière mise à jour du mot de passe de l'utilisateur.

Dans MySQL, vous pouvez utiliser la fonction NOW() pour insérer le timestamp actuel, comme suit :

-- La syntaxe de la base de données MySQL
INSERT INTO users (name, birth_date, created_at)
VALUES ('Bilbo Baggins', '1998-04-16', NOW());

Mais si vous ne souhaitez pas insérer manuellement la date et l'heure actuelles, utilisez simplement les attributs d'initialisation et de mise à jour automatiques des types de données TIMESTAMP et DATETIME.

Pour allouer des attributs automatiques, spécifiez les clauses DEFAULT CURRENT_TIMESTAMP et ON UPDATE CURRENT_TIMESTAMP dans la définition de la colonne, comme suit :

-- La syntaxe de la base de données MySQL
CREATE TABLE users (
    id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE,
    birth_date DATE NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Attention :L'initialisation et la mise à jour automatiques des données de type DATETIME ne sont disponibles que dans MySQL 5.6.5ou versions ultérieures. Si vous utilisez une ancienne version, utilisez TIMESTAMP.

Extraire une partie de la date ou de l'heure

Dans certains cas, vous souhaitez peut-être ne récupérer qu'une partie de la date ou de l'heure. Dans MySQL, vous pouvez utiliser des fonctions spécialement conçues pour extraire des parties de valeurs temporelles, telles que YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() et autres.

La requête SQL suivante extrait la partie année de la valeur de la colonne birth_date, par exemple, si la date d'anniversaire de tout utilisateur est1987-01-14alors YEAR(birth_date) retournera1987.

mysql> SELECT name, YEAR(birth_date) FROM users;

De même, vous pouvez utiliser la fonction DAYOFMONTH() pour obtenir un jour donné du mois, par exemple, si la date de naissance birth_date de tout utilisateur est1986-10-06,则DAYOFMONTH(birth_date)将返回6.

mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;

Formatage de date ou d'heure

Si vous souhaitez utiliser un format de date et d'heure plus descriptif et lisible dans le jeu de résultats, vous pouvez reformater les valeurs existantes de date et d'heure en utilisant les fonctions DATE_FORMAT() et TIME_FORMAT().

Le SQL suivant mettra en forme le format plus lisibleusersdans la tablebirth_dateFormat des valeurs de colonnes, par exemple1987Année1Mois14Du jour1987Année1Mois14Valeur du jour.

mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;