![]() ![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() ![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() 7.3.11 Fonctions de date et heure7.2.6 Types date et heure pour une description précise des intervalles de validité de chaque type.
Voici un exemple qui utilise des fonctions sur les dates et heures. La requête ci-dessous sélectionne toutes les lignes avec une valeur qui est mysql> SELECT quelquechose FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; DAYOFWEEK(date)
Retourne le jour de la semaine sous la forme d'un index qui commence à 1 (1 = Dimanche, 2 = Lundi, ... 7 = Samedi). Ces valeurs sont celles du standard ODBC.
mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date)
Retourne le jour de la semaine sous la forme d'un index qui commence à 0 (0 = Dimanche, 1 = Lundi, ... 6 = Samedi).
mysql> select WEEKDAY('1997-10-04 22:23:00'); -> 5 mysql> select WEEKDAY('1997-11-05'); -> 2 DAYOFMONTH(date)
Retourne le jour du mois sous la forme d'un index entre 1 et 31 .
mysql> select DAYOFMONTH('1998-02-03'); -> 3 DAYOFYEAR(date)
Retourne le jour de l'année sous la forme d'un index entre 1 et 366 .
mysql> select DAYOFYEAR('1998-02-03'); -> 34 MONTH(date)
Retourne le mois de la date sous la forme d'un index entre 1 et 12 .
mysql> select MONTH('1998-02-03'); -> 2 DAYNAME(date)
Retourne le nom du jour de la date sous la forme d'une chaîne (en anglais ).
mysql> select DAYNAME("1998-02-05"); -> 'Thursday' MONTHNAME(date)
Retourne le nom du mois de la date sous la forme d'une chaîne (en anglais ).
mysql> select MONTHNAME("1998-02-05"); -> 'February' QUARTER(date)
Retourne le trimestre de la date sous la forme d'un index entre 1 et 4 .
mysql> select QUARTER('98-04-01'); -> 2 WEEK(date)
WEEK(date,first)
Avec un seul argument, retourne la semaine de la date sous la forme d'un index entre 1 à 52 , avec Dimanche comme premier jour de la semaine. La fonction avec deux arguments permet de préciser si la semaine commence à Dimanche (0 ) ou Lundi (1 ).
mysql> select WEEK('1998-02-20'); -> 7 mysql> select WEEK('1998-02-20',0); -> 7 mysql> select WEEK('1998-02-20',1); -> 8 YEAR(date)
Retourne l'année de la date sous la forme d'un index entre 1000 et 9999 .
mysql> select YEAR('98-02-03'); -> 1998 HOUR(time)
Retourne l'heure de la date sous la forme d'un index entre 0 et 23 .
mysql> select HOUR('10:05:03'); -> 10 MINUTE(time)
Retourne la minute de la date sous la forme d'un index entre 0 et 59 .
mysql> select MINUTE('98-02-03 10:05:03'); -> 5 SECOND(time)
Retourne la seconde de la date sous la forme d'un index entre 0 et 59 .
mysql> select SECOND('10:05:03'); -> 3 PERIOD_ADD(P,N)
Ajoute N mois à la date P (au format YYMM ou YYYYMM ). Retourne le résultat au format YYYYMM . Il faut bien noter que la date P n'est pas au format date .
mysql> select PERIOD_ADD(9801,2); -> 199803 PERIOD_DIFF(P1,P2)
Retourne le nombre de mois entre deux dates P1 et P2 . P1 et P2 doivent être au format . Il faut bien noter que les dates P1 et P2 ne sont pas au format date .
mysql> select PERIOD_DIFF(9802,199703); -> 11 DATE_ADD(date,INTERVAL expression type)
DATE_SUB(date,INTERVAL expression type)
ADDDATE(date,INTERVAL expression type)
SUBDATE(date,INTERVAL expression type)
Ces fonctions effectuent des opérations arithmétiques sur les dates. Elles ont été inserées dans MySQL 3.22. ADDDATE() et SUBDATE() sont synonymes de DATE_ADD() et DATE_SUB() . date est de type DATETIME ou DATE , qui indique la date de début. expression est une expression qui donne une durée à ajouter ou à retrancher à la date de début. expression est une chaîne qui peut commencer par un signe moins (``-''), pour indiquer une durée négative. type est un mot clé qui indique comment l'expression doit être considéré. La table suivante établit la relation type et expression :
expr format.
The ones shown in the table are the suggested delimiters. If the date
argument is a DATE value and your calculations involve only
YEAR , MONTH and DAY parts (that is, no time parts), the
result is a DATE value. Otherwise the result is a DATETIME
value.
mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND); -> 1998-01-01 00:00:00 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY); -> 1998-01-01 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 mysql> SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02 mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); -> 20102MySQL accepte l'utilisation de délimiteurs non-numériques dans le format de expression . Ceux présentés dans le tableaux ne sont que des suggestions. Si l'argument date est au format DATE et que les calculs font intervenir seulement YEAR , MONTH et DAY (c'est à dire, juste la date, par l'heure.), le résultat est de type DATE . Sinon, le résultat des de type DATETIME .
mysql> select DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND); -> 1998-01-01 00:00:00 mysql> select DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY); -> 1998-01-01 23:59:59 mysql> select DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 mysql> select DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 mysql> select DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 mysql> select DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02
Si l'argument de durée est trop court par rapport au mot clé spécifié, MySQL suppose que les parties de gauche sont mises à zéro. Par exemple, avec le mot clé mysql> select DATE_ADD('1998-01-30', Interval 1 month); -> 1998-02-28
Note from the preceding example that the word TO_DAYS(date)
Retourne l'index du jour par rapport au 1er janvier 0.
mysql> select TO_DAYS(950501); -> 728779 mysql> select TO_DAYS('1997-10-07'); -> 729669
FROM_DAYS(N)
Etant donné un numéro de jour par rapport au 1er janvier 0, retourne une valeur de type DATE .
mysql> select FROM_DAYS(729669); -> '1997-10-07'
DATE_FORMAT(date,format)
Formate la date date en fonction de la chaîne format . Les formats suivants peuvent être utilisé dans format :
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -> 'Saturday October 1997' mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j'); -> '4th 97 Sat 04 10 Oct 277' mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6'
Depuis MySQL 3.23, le caractère TIME_FORMAT(time,format)
Utilisation identique à DATE_FORMAT() , mais seulement pour les heures (heures, minutes secondes). Les autres arguments conduisent à un résultat a NULL ou 0 .
CURDATE()
CURRENT_DATE
Retourne la date du jour, au format 'YYYY-MM-DD' ou YYYYMMDD , suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select CURDATE(); -> '1997-12-15' mysql> select CURDATE() + 0; -> 19971215 CURTIME()
CURRENT_TIME
Retourne l'heure du jour, au format 'HH:MM:SS' or HHMMSS , suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select CURTIME(); -> '23:50:26' mysql> select CURTIME() + 0; -> 235026 NOW()
SYSDATE()
CURRENT_TIMESTAMP
Retourne la date et l'heure du jour, au format 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS , suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select NOW(); -> '1997-12-15 23:50:26' mysql> select NOW() + 0; -> 19971215235026 UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
Utilisé sans argument, retourne un timestamp Unix (le nombre de secondes depuis '1970-01-01 00:00:00' GMT) . Utilisé avec un argument de type date , il renvoie le timestamp Unix correspondant à cette date. DATE peut être aux formats chaîne DATE chaîne, DATETIME chaîne, TIMESTAMP , ou un nombre au format YYMMDD ou YYYYMMDD .
mysql> select UNIX_TIMESTAMP(); -> 882226357 mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); -> 875996580
Quand un unix_timestamp au format 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select FROM_UNIXTIME(875996580); -> '1997-10-04 22:23:00' mysql> select FROM_UNIXTIME(875996580) + 0; -> 19971004222300 FROM_UNIXTIME(unix_timestamp,format)
Retourne la représentation de l'argument unix_timestamp au format format , suivant que la fonction est utilisée en contexte chaîne ou numérique. Le format est spécifié comme pour la fonction the DATE_FORMAT().
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x'); -> '1997 23rd December 03:43:30 x' SEC_TO_TIME(seconds)
Converti l'argument seconds en heures, minutes et secondes, au format 'HH:MM:SS' or HHMMSS , suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select SEC_TO_TIME(2378); -> '00:39:38' mysql> select SEC_TO_TIME(2378) + 0; -> 3938 TIME_TO_SEC(time)
Retourne l'argument time , converti en secondes.
mysql> select TIME_TO_SEC('22:23:00'); -> 80580 mysql> select TIME_TO_SEC('00:39:38'); -> 2378 |