MySQL fonctions de date et de temps
Par PlaceOweb le mercredi, octobre 26 2011, 20:31 - SQL - Lien permanent
Comment gérer ses dates avec MySQL, soustraire des dates, ajouter des intervalles de temps, ...
... extraire les secondes, minutes, jours, semaines, mois, ans...
Les entrées récentes selon un intervalle d'un mois
/** * Sélection des entrée de ma table qui ont une date récente (moins d'un mois en rapport à la date heure courante) */ SELECT * FROM maTable WHERE CURRENT_TIMESTAMP - INTERVAL 1 MONTH > maColonneDateTimeOuTimeStamp
Soustraire 2 dates times en secondes
/** * La date heure en cours */ mysql>SELECT CURRENT_TIMESTAMP; +---------------------+ | CURRENT_TIMESTAMP | +---------------------+ | 2011-10-26 12:12:16 | +---------------------+ 1 row in set (0.00 sec) /** * Mauvaise soustraction de date */ mysql>SELECT '2011-10-26 08:01:20' - '2011-10-26 08:00:00' AS maDate; +--------+ | maDate | +--------+ | 0 | +--------+ 1 row in set, 2 warnings (0.00 sec) mysql>SELECT CURRENT_TIMESTAMP - '2011-10-26 08:00:00' AS maDate; +----------------+ | maDate | +----------------+ | 20111026119112 | +----------------+ 1 row in set, 1 warning (0.00 sec) mysql>SELECT CURRENT_TIMESTAMP - CAST('2011-10-26 08:00:00' AS DATETIME) AS maDate; +--------------+ | maDate | +--------------+ | 41134.000000 | +--------------+ 1 row in set (0.01 sec) /** * Soustraction correcte de date, mais qui retourne une période et non pas des secondes */ mysql>SELECT CAST('2011-10-26 08:01:20' AS DATETIME) - CAST('2011-10-26 08:00:00' AS DATETIME) AS maDate; +------------+ | maDate | +------------+ | 120.000000 | +------------+ 1 row in set (0.00 sec) mysql>SELECT CAST('2011-10-27 08:01:20' AS DATETIME) - CAST('2011-10-26 08:00:00' AS DATETIME) AS maDate; +----------------+ | maDate | +----------------+ | 1000120.000000 | +----------------+ 1 row in set (0.00 sec) mysql>SELECT TIME_TO_SEC(CAST('2011-10-26 08:01:20' AS DATETIME) - CAST('2011-10-26 08:00:00' AS DATETIME)) AS maDate; +--------+ | maDate | +--------+ | 80 | +--------+ 1 row in set (0.00 sec) mysql>SELECT TIME_TO_SEC(CAST('2011-10-27 08:01:20' AS DATETIME) - CAST('2011-10-26 08:00:00' AS DATETIME)) AS maDate; +--------+ | maDate | +--------+ | 360080 | +--------+ 1 row in set (0.00 sec) /** * Soustraction correcte de date en secondes unix */ mysql>SELECT UNIX_TIMESTAMP('2011-10-26 08:01:20') - UNIX_TIMESTAMP('2011-10-26 08:00:00') AS maDate; +--------+ | maDate | +--------+ | 80 | +--------+ 1 row in set (0.00 sec) mysql>SELECT UNIX_TIMESTAMP('2011-10-27 08:01:20') - UNIX_TIMESTAMP('2011-10-26 08:00:00') AS maDate; +--------+ | maDate | +--------+ | 86480 | +--------+ 1 row in set (0.00 sec) mysql>SELECT UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP('2011-10-26 08:00:00') AS maDate; +--------+ | maDate | +--------+ | 15801 | +--------+ 1 row in set (0.00 sec)
- MySQL date and time functions - page 1 (2003) DATE_ADD INTERVAL PERIOD_ADD PERIOD_DIFF
- MySQL date and time functions - page 2 DATE_FORMAT UNIX_TIMESTAMP
- MySQL date and time functions - page 2 CURRENT_DATE CURRENT_TIME DAYOFMONTH DAYOFWEEK DAYOFYEAR EXTRACT FROM_UNIXTIME MINUTE HOUR MONTH WEEK YEAR NOW QUARTER SEC_TO_TIME TIME_FORMAT TIME_TO_SEC TO_DAYS