| 13 Fonctions à utiliser dans les clauses SELECT et WHERE
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Opérateurs et fonctions tous types
 . Les fonctions de contrôle
 . Fonctions de chaînes de caractères
 . Fonctions numériques
 ->Fonctions de dates et d'heures
 . Recherche en texte intégral ( Full-text ) dans MySQL
 . Fonctions de transtypage
 . Autres fonctions
 . Fonctions et options à utiliser dans les clauses GROUP BY
 
 
 | 
  13.5 Fonctions de dates et d'heures   
 
Cette section décrit les fonctions qui peuvent être utilisées pour manipuler les valeurs temporelles.
Voir  Types temporels  pour une description détaillée des intervalles de
validité de chaque type, ainsi que les formats valides de spécifications des dates et heures.
Voici un exemple d'utilisation des fonctions de date. La requête suivante sélectionne
toutes les lignes dont la colonne  
date_col
  représente une date de moins de 30 jours : Notez que cette requête va aussi sélectionner des lignes dont les dates sont dans le futur.Les fonctions qui utilisent des valeurs de date acceptent les valeurs
de type  
DATETIME
  et ignore la partie horaire. Les fonctions qui attendent
des heures acceptent les valeurs littérales et ignorent la partie de date.| 
mysql> SELECT quelquechose FROM nom_de_tableWHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
 | 
 
Les fonctions qui retourne la date ou l'heure courante sont évaluées une
fois par requête, tout au début. Cela signifie que des références multiples
à la fonction  
NOW()
  dans une même requête produiront toujours le même
résultat. Ce principe s'applique aussi à  
CURDATE()
 ,
 
CURTIME()
 ,  
UTC_DATE()
 ,  
UTC_TIME()
 ,  
UTC_TIMESTAMP()
 ,
et leurs synonymes.
Les intervalles de valeurs de retour des fonctions suivantes s'appliquent
aux dates complètes. Si une date est une valeur ``zéro'' ou une date incomplète,
comme  
'2001-11-00'
 , les fonctions qui extraient une partie d'une date
retourneront  
0
 . Par exemple,  
DAYOFMONTH('2001-11-00')
  retourne  
0
 . 
ADDDATE(date,INTERVAL expr type)
      
      
ADDDATE(expr,days)
      
Lorsqu'elle est utilisée avec la forme  
INTERVAL
 ,
 
ADDDATE()
  est un synonyme de  
DATE_ADD()
 .  La fonction
complémentaire  
SUBDATE()
  est un synonyme  
DATE_SUB()
 . 
Depuis MySQL 4.1.1, la seconde syntaxe est utilisée si  
expr
  est une
expression de type  
DATE
  ou  
DATETIME
 , et que  
days
  est un nombre de jour
à ajouter à  
expr
 .| 
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);-> '1998-02-02'
 mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
 -> '1998-02-02'
 | 
 | 
mysql> SELECT ADDDATE('1998-01-02', 31);-> '1998-02-02'
 | 
 
ADDTIME(expr,expr2)
ADDTIME()
  ajoute  
expr2
  à  
expr
  et retourne le résultat.
 
expr
  est une expression de type  
DATE
  ou  
DATETIME
 , et  
expr2
  
est une expression de type  
TIME
 .
 ADDTIME()
  a été ajouté en MySQL 4.1.1.| 
mysql> SELECT ADDTIME("1997-12-31 23:59:59.999999", "1 1:1:1.000002");-> '1998-01-02 01:01:01.000001'
 mysql> SELECT ADDTIME("01:00:00.999999", "02:00:00.999998");
 -> '03:00:01.999997'
 | 
 
CURDATE()
      
      
CURRENT_DATE
      Retourne la date courante au format  
'YYYY-MM-DD'
  ou  
YYYYMMDD
 , 
suivant le contexte numérique ou chaîne : 
| 
mysql> SELECT CURDATE();-> '1997-12-15'
 mysql> SELECT CURDATE() + 0;
 -> 19971215
 | 
 
CURRENT_DATE
      
      
CURRENT_DATE()
CURRENT_DATE
  et  
CURRENT_DATE()
  sont synonymes de
 
CURDATE()
 .
 
 
CURTIME()
      
Retourne l'heure courante au format  
'HH:MM:SS'
  or  
HHMMSS
 
suivant le contexte numérique ou chaîne : 
| 
mysql> SELECT CURTIME();-> '23:50:26'
 mysql> SELECT CURTIME() + 0;
 -> 235026
 | 
 
CURRENT_TIME
      
      
CURRENT_TIME()
CURRENT_TIME
  et  
CURRENT_TIME()
  sont synonymes de
 
CURTIME()
 .
 
 
CURRENT_TIMESTAMP
      
      
CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP
  et  
CURRENT_TIMESTAMP()
  sont synonymes de
 
NOW()
 .
 
 
DATE(expr)
      
Extrait la partie date de l'expression  
expr
  de type  
DATE
 
ou  
DATETIME
 . 
DATE()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT DATE('2003-12-31 01:02:03');-> '2003-12-31'
 | 
 
DATEDIFF(expr,expr2)
DATEDIFF()
  retourne le nombre de jours entre la date de début
 
expr
  et la date de fin  
expr2
 .
 
expr
  et  
expr2
  sont des expressions de type  
DATE
  ou  
DATETIME
 .
Seule la partie  
DATE
  est utilisée dans le calcul. 
DATEDIFF()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');-> 1
 mysql> SELECT DATEDIFF('1997-11-31 23:59:59','1997-12-31');
 -> -30
 | 
 
DATE_ADD(date,INTERVAL expr type)
      
      
DATE_SUB(date,INTERVAL expr type)
      
Ces fonctions effectuent des calculs arithmétiques sur les dates.Depuis MySQL 3.23,  
INTERVAL expr type
  est autorisé des deux cotés
de l'opérateur  
+
  si l'expression de l'autre coté est de type 
 
DATE
  ou  
DATETIME
 . 
Pour l'opérateur  
-
 ,  
INTERVAL expr type
  est autorisé uniquement
du coté droit, car on ne peut pas soustraire une date d'un intervalle (voir
les exemples ci-dessous).
 
date
  est une valeur de type  
DATETIME
  ou  
DATE
  qui spécifie 
la date de début.  
expr
  est une expression qui spécifie une valeur d'intervalle
à ajouter ou soustraire de la date initiale.  
expr
  est une chaîne : elle peut 
commencer avec  
'-'
  pour les intervalles négatifs.  
type
  est un mot-clé,
indiquant comment l'expression doit être interprétée.
La table suivante indique la signification des arguments  
type
  et  
expr
  : 
Les valeurs de  
type
 
DAY_MICROSECOND
 ,  
HOUR_MICROSECOND
 ,
 
MINUTE_MICROSECOND
 ,  
SECOND_MICROSECOND
 ,
et  
MICROSECOND
  ont été ajoutés en MySQL 4.1.1.
Les valeurs  
QUARTER
  et  
WEEK
  sont disponibles depuis MySQL 5.0.0.
| type
Valeur | Attendue
expr
Format |  
| MICROSECOND | MICROSECONDS |  
| SECOND | SECONDS |  
| MINUTE | MINUTES |  
| HOUR | HOURS |  
| DAY | DAYS |  
| WEEK | WEEKS |  
| MONTH | MONTHS |  
| QUARTER | QUARTERS |  
| YEAR | YEARS |  
| SECOND_MICROSECOND | 'SECONDS.MICROSECONDS' |  
| MINUTE_MICROSECOND | 'MINUTES.MICROSECONDS' |  
| MINUTE_SECOND | 'MINUTES:SECONDS' |  
| HOUR_MICROSECOND | 'HOURS.MICROSECONDS' |  
| HOUR_SECOND | 'HOURS:MINUTES:SECONDS' |  
| HOUR_MINUTE | 'HOURS:MINUTES' |  
| DAY_MICROSECOND | 'DAYS.MICROSECONDS' |  
| DAY_SECOND | 'DAYS HOURS:MINUTES:SECONDS' |  
| DAY_MINUTE | 'DAYS HOURS:MINUTES' |  
| DAY_HOUR | 'DAYS HOURS' |  
| YEAR_MONTH | 'YEARS-MONTHS' |  
MySQL autorise tous les signes de ponctuation, comme délimiteur dans le format de 
 
expr
 . Ceux qui sont affichés dans la table sont des suggestions. Si
l'argument  
date
  est une valeur  
DATE
  et que vos calculs impliquent
des parties  
YEAR
 ,  
MONTH
  et  
DAY
  (c'est à dire, sans partie
horaire), le résultat sera de type  
DATE
 . Sinon, le résultat est de type
 
DATETIME
  :
 Si vous spécifiez un intervalle qui est trop court (il n'inclut pas
toutes les parties d'intervalle attendues par  
type
 ),
MySQL suppose que vous avez omis les valeurs de gauche. Par exemple,
si vous spécifiez un type  
type
  de  
DAY_SECOND
 , la valeur
 
expr
  devrait contenir des jours, heures, minutes et
secondes. Si vous fournissez une valeur de la forme  
'1:10'
 , MySQL 
suppose que les jours et heures manquent, et que la valeur représente des
minutes et secondes. En d'autres termes,  
'1:10' DAY_SECOND
  est interprété
comme  
'1:10' MINUTE_SECOND
 . C'est similaire au comportement de MySQL
avec les valeurs de type  
TIME
 , qui représente des durées plutôt que
des horaires.| 
mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;-> '1998-01-01 00:00:00'
 mysql> SELECT INTERVAL 1 DAY + '1997-12-31';
 -> '1998-01-01'
 mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND;
 -> '1997-12-31 23:59:59'
 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 DATE_ADD('1992-12-31 23:59:59.000002',
 ->                 INTERVAL '1.999999' SECOND_MICROSECOND);
 -> '1993-01-01 00:00:01.000001'
 | 
 
Notez que si vous ajoutez ou soustrayez à une valeur de type  
DATE
 
des horaires, le résultat sera automatiquement au format  
DATETIME
  :
 Si vous utilisez des dates malformées, le résultat sera  
NULL
 . Si
vous ajoutez des  
MONTH
 ,  
YEAR_MONTH
  ou  
YEAR
 , et que le
résultat a un jour du mois qui est au-delà de ce qui est possible dans
le mois, le jour sera adapté au plus grand jour possible du mois. Par exemple :| 
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY);-> '1999-01-02'
 mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
 -> '1999-01-01 01:00:00'
 | 
 Notez que dans l'exemple précédent, le mot clé  
INTERVAL
  et le
spécificateur  
type
  sont insensibles à la casse.| 
mysql> SELECT DATE_ADD('1998-01-30', interval 1 month);-> '1998-02-28'
 | 
 
DATE_FORMAT(date,format)
      Formate la date  
date
  avec le format  
format
 . Les spécificateurs suivants 
peuvent être utilisé dans la chaîne  
format
  : 
| Option | Description |  
| %% | Un signe pourcentage littéral 
'%'
. |  
| %a | Nom du jour de la semaine, en abrégé et en anglais (
Sun
..
Sat
) |  
| %b | Nom du mois, en abrégé et en anglais (
Jan
..
Dec
) |  
| %c | Mois, au format numérique (
1
..
12
) |  
| %d | Jour du mois, au format numérique (
00
..
31
) |  
| %D | Jour du mois, avec un suffixe anglais (
1st
, 
2nd
, 
3rd
, etc.) |  
| %e | Jour du mois, au format numérique (
0
..
31
) |  
| %f | Microsecondes (
000000
..
999999
) |  
| %H | Heure (
00
..
23
) |  
| %h | Heure (
01
..
12
) |  
| %I | Heure (
01
..
12
) |  
| %i | Minutes, au format numérique (
00
..
59
) |  
| %j | Jour de l'année (
001
..
366
) |  
| %k | Heure (
0
..
23
) |  
| %l | Heure (
1
..
12
) |  
| %m | Mois, au format numérique (
01
..
12
) |  
| %M | Nom du mois (
January
..
December
) |  
| %p | AM
 ou 
PM |  
| %r | Heures, au format 12 heures (
hh:mm:ss [AP]M
) |  
| %s | Secondes (
00
..
59
) |  
| %S | Secondes (
00
..
59
) |  
| %T | Heures, au format 24 heures (
hh:mm:ss
) |  
| %U | Numéro de la semaine (
00
..
53
), où Dimanche est le premier  jour de la semaine |  
| %u | Numéro de la semaine (
00
..
53
), où Lundi est le premier jour de la semaine |  
| %V | Numéro de la semaine (
01
..
53
), où Dimanche est le premier jour de la semaine, utilisé avec '%X' |  
| %v | Numéro de la semaine (
01
..
53
), où Lundi est le premier jour de la semaine, utilisé avec '%x' |  
| %W | Nom du jour de la semaine (
Sunday
..
Saturday
) |  
| %w | Numéro du jour de la semaine (
0
=Sunday..
6
=Saturday) |  
| %X | Année, pour les semaines qui commencent le Dimanche, au format numérique, sur 4 chiffres, utilisé avec '%V' |  
| %x | Année, pour les semaines qui commencent le Lundi, au format numérique, sur 4 chiffres, utilisé avec '%v' |  
| %y | Année, au format numérique, sur 2 chiffres |  
| %Y | Année, au format numérique, sur 4 chiffres |  
Tous les autres caractères sont simplement copiés dans le résultat sans interprétation:
Le format  
%f
  est disponible depuis MySQL 4.1.1. 
Depuis MySQL version 3.23, le caractère  
'%'
  est requis devant
les caractères de format. Dans les versions antérieures de MySQL,
 
'%'
  était optionnel.
La raison qui fait que les intervalles de mois et de jours commencent
avec zéro est que MySQL autorise les dates incomplètes comme 
 
'2004-00-00'
 , depuis MySQL 3.23. | 
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'
 mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
 -> '1998 52'
 | 
 
DAY(date)
DAY()
  est un synonyme de  
DAYOFMONTH()
 .
Cette fonction est disponible depuis MySQL 4.1.1.
 
 
DAYNAME(date)
      Retourne le nom du jour de la semaine de  
date
  : 
| 
mysql> SELECT DAYNAME('1998-02-05');-> 'Thursday'
 | 
 
DAYOFMONTH(date)
      Retourne le jour de la date  
date
 , dans un intervalle de  
1
  à
 
31
  : 
| 
mysql> SELECT DAYOFMONTH('1998-02-03');-> 3
 | 
 
DAYOFWEEK(date)
      Retourne l'index du jour de la semaine : pour  
date
  ( 
1
  = Dimanche, 
 
2
  = Lundi, ...  
7
  = Samedi). Ces index correspondent au standard ODBC :  
| 
mysql> SELECT DAYOFWEEK('1998-02-03');-> 3
 | 
 
DAYOFYEAR(date)
      Retourne le jour de la date  
date
 , dans un intervalle de  
1
  à
 
366
  : 
| 
mysql> SELECT DAYOFYEAR('1998-02-03');-> 34
 | 
 
EXTRACT(type FROM date)
      
La fonction  
EXTRACT()
  utilise les mêmes types d'intervalles que la fonction  
DATE_ADD()
 
ou la fonction  
DATE_SUB()
 , mais extrait des parties de date plutôt que des opérations de date. 
| 
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");
 -> 20102
 mysql> SELECT EXTRACT(MICROSECOND FROM "2003-01-02 10:30:00.00123");
 -> 123
 | 
 
FROM_DAYS(N)
      Retourne la date correspondant au nombre de jours ( 
N
 )  depuis la date 0 : 
FROM_DAYS()
  n'est pas fait pour travailler avec des dates qui précèdent 
l'avènement du calendrier Grégorien (1582), car elle ne prend pas en compte les 
jours perdus lors du changement de calendrier.| 
mysql> SELECT FROM_DAYS(729669);-> '1997-10-07'
 | 
 
FROM_UNIXTIME(unix_timestamp)
      Retourne une représentation de l'argument  
unix_timestamp
  sous la forme 
 
'YYYY-MM-DD HH:MM:SS'
  ou  
YYYYMMDDHHMMSS
 , suivant si la fonction est utilisé
dans un contexte numérique ou de chaîne. 
Si  
format
  est donné, le résultat est formaté en fonction de la chaîne
 
format
 .  
format
  peut contenir les mêmes options de format que 
celles utilisées par  
DATE_FORMAT()
  :| 
mysql> SELECT FROM_UNIXTIME(875996580);-> '1997-10-04 22:23:00'
 mysql> SELECT FROM_UNIXTIME(875996580) + 0;
 -> 19971004222300
 | 
 | 
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),->                      '%Y %D %M %h:%i:%s %x');
 -> '2003 6th August 06:22:58 2003'
 | 
 
GET_FORMAT(DATE | TIME | TIMESTAMP, 'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL')
      Retourne une chaîne de format. Cette fonction est pratique lorsqu'elle est utilisée avec 
les fonctions  
DATE_FORMAT()
  et  
STR_TO_DATE()
 .
Les trois valeurs possibles pour le premier argument, et les
cinq valeurs possible pour le second argument donnent 15 formats
d'affichage (pour les options utilisées, voyez la table de la 
fonction  
DATE_FORMAT()
 ) :
 
Le format ISO est le format ISO 9075, et non ISO 8601.
| Appel fonction | Résultat |  
| GET_FORMAT(DATE,'USA') | '%m.%d.%Y' |  
| GET_FORMAT(DATE,'JIS') | '%Y-%m-%d' |  
| GET_FORMAT(DATE,'ISO') | '%Y-%m-%d' |  
| GET_FORMAT(DATE,'EUR') | '%d.%m.%Y' |  
| GET_FORMAT(DATE,'INTERNAL') | '%Y%m%d' |  
| GET_FORMAT(TIMESTAMP,'USA') | '%Y-%m-%d-%H.%i.%s' |  
| GET_FORMAT(TIMESTAMP,'JIS') | '%Y-%m-%d %H:%i:%s' |  
| GET_FORMAT(TIMESTAMP,'ISO') | '%Y-%m-%d %H:%i:%s' |  
| GET_FORMAT(TIMESTAMP,'EUR') | '%Y-%m-%d-%H.%i.%s' |  
| GET_FORMAT(TIMESTAMP,'INTERNAL') | '%Y%m%d%H%i%s' |  
| GET_FORMAT(TIME,'USA') | '%h:%i:%s %p' |  
| GET_FORMAT(TIME,'JIS') | '%H:%i:%s' |  
| GET_FORMAT(TIME,'ISO') | '%H:%i:%s' |  
| GET_FORMAT(TIME,'EUR') | '%H.%i.%S' |  
| GET_FORMAT(TIME,'INTERNAL') | '%H%i%s' |  GET_FORMAT()
  est disponible depuis MySQL 4.1.1.
Voyez  Syntaxe de 
SET
 .| 
mysql> SELECT DATE_FORMAT('2003-10-03', GET_FORMAT(DATE, 'EUR')-> '03.10.2003'
 mysql> SELECT STR_TO_DATE('10.31.2003', GET_FORMAT(DATE, 'USA'))
 -> 2003-10-31
 | 
 
HOUR(time)
      Retourne le nombre d'heures pour l'heure  
time
 , 
dans un intervalle de  
0
  à  
23
  : 
Cependant, l'intervalle des valeurs  
TIME
  est bien plus grand,
et donc,  
HOUR
  peut retourner des valeurs plus grandes que  
23
  :| 
mysql> SELECT HOUR('10:05:03');-> 10
 | 
 | 
mysql> SELECT HOUR('272:59:59');-> 272
 | 
 
LAST_DAY(date)
      
Prend une valeur de format  
DATE
  ou  
DATETIME
 , et retourne
le dernier jour du mois correspondant. Retourne  
NULL
  
si l'argument est invalide. 
LAST_DAY()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT LAST_DAY('2003-02-05'), LAST_DAY('2004-02-05');-> '2003-02-28', '2004-02-29'
 mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
 -> '2004-01-31'
 mysql> SELECT LAST_DAY('2003-03-32');
 -> NULL
 | 
 
LOCALTIME
      
      
LOCALTIME()
LOCALTIME
  et  
LOCALTIME()
  sont synonymes de
 
NOW()
 .  
LOCALTIMESTAMP
      
      
LOCALTIMESTAMP()
LOCALTIMESTAMP
  et  
LOCALTIMESTAMP()
  sont synonymes de
 
NOW()
 .  
MAKEDATE(year,dayofyear)
      
Retourne une valeur de format  
DATE
 , à partir d'une année
et du numéro de jour.  
dayofyear
  doit être plus grand que 0 ou
le résultat sera  
NULL
 . 
MAKEDATE()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);-> '2001-01-31', '2001-02-01'
 mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);
 -> '2001-12-31', '2004-12-30'
 mysql> SELECT MAKEDATE(2001,0);
 -> NULL
 | 
 
MAKETIME(hour,minute,second)
      
Retourne une valeur de format  
TIME
 , calculée à partir des arguments
 
hour
 ,  
minute
  et  
second
 . 
MAKETIME()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT MAKETIME(12,15,30);-> '12:15:30'
 | 
 
MICROSECOND(expr)
      
Retourne le nombre de microsecondes dans l'expression de type  
TIME
  ou
 
DATETIME
 
expr
 , sous la forme d'un nombre entre  
0
  et  
999999
 . 
MICROSECOND()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT MICROSECOND('12:00:00.123456');-> 123456
 mysql> SELECT MICROSECOND('1997-12-31 23:59:59.000010');
 -> 10
 | 
 
est disponible depuis  
MINUTE(time)
      Retourne le nombre de minutes pour l'heure  
time
 , 
dans un intervalle de  
0
  à  
59
  : 
| 
mysql> SELECT MINUTE('98-02-03 10:05:03');-> 5
 | 
 
MONTH(date)
      Retourne le numéro du mois de la date  
date
 , dans un intervalle de  
1
  
à  
12
  : 
| 
mysql> SELECT MONTH('1998-02-03');-> 2
 | 
 
MONTHNAME(date)
      Retourne le nom du mois de la date  
date
  : 
| 
mysql> SELECT MONTHNAME("1998-02-05");-> 'February'
 | 
 
NOW()
      Retourne la date courante au format   
'YYYY-MM-DD HH:MM:SS'
  ou 
 
YYYYMMDDHHMMSS
 , suivant le 
contexte numérique ou chaîne : 
| 
mysql> SELECT NOW();-> '1997-12-15 23:50:26'
 mysql> SELECT NOW() + 0;
 -> 19971215235026
 | 
 
PERIOD_ADD(P,N)
      Ajoute  
N
  mois à la période  
P
  (au format  
YYMM
  ou  
YYYYMM
 ). 
Retourne une valeur dans le format  
YYYYMM
 .
 
Notez que l'argument  
P
 
n'est pas
  de type date :
 | 
mysql> SELECT PERIOD_ADD(9801,2);-> 199803
 | 
 
PERIOD_DIFF(P1,P2)
      Retourne le nombre de mois entre les périodes  
P1
  et  
P2
 .
 
P1
  et  
P2
  doivent être au format  
YYMM
  ou  
YYYYMM
 .Notez que les arguments  
P1
  et  
P2
 
ne sont pas
  de type date : 
| 
mysql> SELECT PERIOD_DIFF(9802,199703);-> 11
 | 
 
QUARTER(date)
      Retourne le numéro du trimestre de la date  
date
 , dans un intervalle de  
1
 
à  
4
  : 
| 
mysql> SELECT QUARTER('98-04-01');-> 2
 | 
 
SECOND(time)
      Retourne le nombre de secondes pour l'heure  
time
 , dans un intervalle de  
0
  à  
59
  : 
| 
mysql> SELECT SECOND('10:05:03');-> 3
 | 
 
SEC_TO_TIME(seconds)
      Retourne l'argument  
seconds
 , convertit en heures, minutes et secondes au format 
 
'HH:MM:SS'
  ou  
HHMMSS
 , suivant le contexte numérique ou chaîne : 
| 
mysql> SELECT SEC_TO_TIME(2378);-> '00:39:38'
 mysql> SELECT SEC_TO_TIME(2378) + 0;
 -> 3938
 | 
 
STR_TO_DATE(str,format)
      Cette fonction est l'inverse de la fonction  
DATE_FORMAT()
 . Elle 
prend la chaîne  
str
 , et une chaîne de format  
format
 , puis
retourne une valeur  
DATETIME
 .
Les valeurs de type  
DATE
 ,  
TIME
  ou  
DATETIME
  contenues dans la chaîne
 
str
  doivent être au format  
format
 . Pour les options qui sont
utilisables dans la chaîne  
format
 , voyez la table dans la description
de la fonction  
DATE_FORMAT()
 . Tous les autres caractères sont utilisés
littéralement, et ne seront pas interprétés.
Si  
str
  contient une valeur illégale, 
 
STR_TO_DATE()
  retourne  
NULL
 .
 
STR_TO_DATE()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT STR_TO_DATE('03.10.2003 09.20', '%d.%m.%Y %H.%i')-> 2003-10-03 09:20:00
 mysql> SELECT STR_TO_DATE('10rap', '%crap')
 -> 0000-10-00 00:00:00
 mysql> SELECT STR_TO_DATE('2003-15-10 00:00:00', '%Y-%m-%d %H:%i:%s')
 -> NULL
 | 
 
SUBDATE(date,INTERVAL expr type)
      
      
SUBDATE(expr,days)
      
Lorsqu'elle est utilisée avec la forme  
INTERVAL
  du second argument,
 
SUBDATE()
  est synonyme  
DATE_SUB()
 . 
Depuis MySQL 4.1.1, la seconde syntaxe est autorisée, où  
expr
  
est une expression de type  
DATE
  ou  
DATETIME
  et  
days
  est le nombre
de jour à soustraire de l'expression  
expr
 .| 
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);-> '1997-12-02'
 mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
 -> '1997-12-02'
 | 
 | 
mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31);-> '1997-12-02 12:00:00'
 | 
 
SUBTIME(expr,expr2)
SUBTIME()
  soustrait  
expr2
  de  
expr
  et retourne le résultat.
 
expr
  est une expression de format  
DATE
  ou  
DATETIME
  et  
expr2
  est une
expression de type  
TIME
 . 
SUBTIME()
  a été ajoutée en MySQL 4.1.1.| 
mysql> SELECT SUBTIME("1997-12-31 23:59:59.999999", "1 1:1:1.000002");-> '1997-12-30 22:58:58.999997'
 mysql> SELECT SUBTIME("01:00:00.999999", "02:00:00.999998");
 -> '-00:59:59.999999'
 | 
 
SYSDATE()
SYSDATE()
  est un synonyme de  
NOW()
 .  
TIME(expr)
      
Extrait la partie horaire de l'expression  
expr
 ,
de type  
TIME
  ou  
DATETIME
 . 
TIME()
  a été ajoutée en MySQL 4.1.1.| 
mysql> SELECT TIME('2003-12-31 01:02:03');-> '01:02:03'
 mysql> SELECT TIME('2003-12-31 01:02:03.000123');
 -> '01:02:03.000123'
 | 
 
TIMEDIFF(expr,expr2)
TIMEDIFF()
  retourne la durée entre l'heure de début
 
expr
  et l'heure de fin  
expr2
 .
 
expr
  et  
expr2
  sont des expressions de type  
TIME
  ou  
DATETIME
 ,
et doivent être de même type.
 TIMEDIFF()
  a été ajoutée en MySQL 4.1.1.| 
mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');-> '-00:00:00.000001'
 mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001','1997-12-30 01:01:01.000002');
 -> '46:58:57.999999'
 | 
 
TIMESTAMP(expr)
      
      
TIMESTAMP(expr,expr2)
      
Avec un seul argument, retourne l'expression  
expr
  de type  
DATE
 
ou  
DATETIME
  sous la forme d'une valeur  
DATETIME
 .
Avec deux arguments, ajouter l'expression  
expr2
  à l'expression
 
expr
  et retourne le résultat au format  
DATETIME
 . 
TIMESTAMP()
  a été ajoutée en MySQL 4.1.1.| 
mysql> SELECT TIMESTAMP('2003-12-31');-> '2003-12-31 00:00:00'
 mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
 -> '2004-01-01 00:00:00'
 | 
 
TIMESTAMPADD(interval,int_expr,datetime_expr)
      
Ajoute l'expression entière  
int_expr
  à l'expression  
datetime_expr
 
au format  
DATE
  ou  
DATETIME
 . L'unité de  
int_expr
  est donnée avec l'argument
 
interval
 , qui peut être l'une des valeurs suivantes :
 
FRAC_SECOND
 ,
 
SECOND
 ,
 
MINUTE
 ,
 
HOUR
 ,
 
DAY
 ,
 
WEEK
 ,
 
MONTH
 ,
 
QUARTER
 ,
ou
 
YEAR
 .La valeur  
interval
  peut être spécifiée, en utilisant un des mots-clé cités,
ou avec le préfixe  
SQL_TSI_
 . Par exemple,  
DAY
  et
 
SQL_TSI_DAY
  sont tous les deux valides. 
TIMESTAMPADD()
  a été ajoutée en MySQL 5.0.0.| 
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');-> '2003-01-02 00:01:00'
 mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
 -> '2003-01-09'
 | 
 
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
      
Retourne la différence entière entre les expressions  
datetime_expr1
  et
 
datetime_expr2
 , de format  
DATE
  et  
DATETIME
 . L'unité du résultat est donné
par l'argument  
interval
 . Les valeurs légales de  
interval
  sont les mêmes
que pour la fonction  
TIMESTAMPADD()
 . 
TIMESTAMPDIFF()
  a été ajoutée en MySQL 5.0.0.| 
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');-> 3
 mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
 -> -1
 | 
 
TIME_FORMAT(time,format)
      Cette fonction est utilisée exactement comme la fonction  
DATE_FORMAT()
  ci-dessus, 
mais la chaîne  
format
  ne doit utiliser que des spécificateurs d'heures, qui gèrent 
les heures, minutes et secondes. Les autres spécificateurs génèreront la valeur  
NULL
  ou  
0
 .
 
Si la valeur  
time
  contient une valeur d'heure qui est plus grande
que  
23
 , les formats  
%H
  et  
%k
  produiront une valeur
qui est hors de l'intervalle  
0..23
 . L'autre format d'heure produira
une heure modulo 12 :
 | 
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');-> '100 100 04 04 4'
 | 
 
TIME_TO_SEC(time)
      Retourne l'argument  
time
 , convertit en secondes : 
| 
mysql> SELECT TIME_TO_SEC('22:23:00');-> 80580
 mysql> SELECT TIME_TO_SEC('00:39:38');
 -> 2378
 | 
 
TO_DAYS(date)
      Retourne le nombre de jours depuis la date 0 jusqu'à la date  
date
  : 
TO_DAYS()
  n'est pas fait pour travailler avec des dates qui précèdent l'avènement 
du calendrier Grégorien (1582), car elle ne prend pas en compte les jours perdus 
lors du changement de calendrier.| 
mysql> SELECT TO_DAYS(950501);-> 728779
 mysql> SELECT TO_DAYS('1997-10-07');
 -> 729669
 | 
 
N'oubliez pas que MySQL convertit les années représentées sur deux chiffres en dates
à quatre chiffres, en utilisant les règles de la section  Types temporels . 
Par exemple,  
'1997-10-07'
  et  
'97-10-07'
  sont identiques :
 Pour les dates antérieures à 1582, les résultats sont indéfinis.| 
mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');-> 729669, 729669
 | 
 
UNIX_TIMESTAMP()
      
      
UNIX_TIMESTAMP(date)
      Lorsqu'elle est appelé sans argument, cette fonction retourne un timestamp Unix (nombre de secondes depuis
 
'1970-01-01 00:00:00'
  GMT). Si  
UNIX_TIMESTAMP()
  est appelé avec un argument  
date
 
, elle retourne le timestamp correspondant à cette date.  
date
  peut être une chaîne de type
 
DATE
 ,  
DATETIME
 ,  
TIMESTAMP
 , ou un nombre au format  
YYMMDD
  ou  
YYYYMMDD
 ,
en horaire local : 
Lorsque  
UNIX_TIMESTAMP
  est utilisé sur une colonne de type  
TIMESTAMP
 , la fonction 
reçoit directement la valeur, sans conversion explicite. Si vous donnez à  
UNIX_TIMESTAMP()
  une date 
hors de son intervalle de validité, elle retourne 0.Si vous voulez soustraire une colonne de type  
UNIX_TIMESTAMP()
 , vous devez sûrement vouloir un 
résultat de type entier signé.  Fonctions de transtypage .| 
mysql> SELECT UNIX_TIMESTAMP();-> 882226357
 mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
 -> 875996580
 | 
 
UTC_DATE
      
      
UTC_DATE()
      Retourne la date UTC courante au format  
'YYYY-MM-DD'
  ou
 
YYYYMMDD
  suivant le contexte numérique ou chaîne : 
UTC_DATE()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;-> '2003-08-14', 20030814
 | 
 
UTC_TIME
      
      
UTC_TIME()
      Retourne l'heure UTC courante au format  
'HH:MM:SS'
  or  
HHMMSS
 
suivant le contexte numérique ou chaîne : 
UTC_TIME()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;-> '18:07:53', 180753
 | 
 
UTC_TIMESTAMP
      
      
UTC_TIMESTAMP()
      Retourne l'heure et la date UTC courante au format   
'YYYY-MM-DD HH:MM:SS'
 
or  
YYYYMMDDHHMMSS
  suivant le contexte numérique ou chaîne : 
UTC_TIMESTAMP()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;-> '2003-08-14 18:08:04', 20030814180804
 | 
 
WEEK(date [,mode])
      Avec un seul argument, retourne le numéro de la semaine dans l'année de la date 
 
date
 , dans un intervalle de  
0
  à  
53
  (oui, il peut y avoir un
début de semaine numéro 53), en considérant que Dimanche est le premier jour de la semaine.
Avec deux arguments, la fonction  
WEEK()
  vous permet de spécifier si les
semaines commencent le Dimanche ou le Lundi et la valeur retournée sera dans l'intervalle
 
0-53
  ou bien  
1-52
 . Lorsque l'argument  
mode
  est omis,
la valeur de la variable  
default_week_format
  (ou 0 en
MySQL 4.0 ou plus ancien) est utilisé.  Syntaxe de 
SET
 .Voici un tableau explicatif sur le fonctionnement du second argument : 
Le  
mode
  3 est disponible depuis MySQL 4.0.5.
Le  
mode
  4 est disponible depuis MySQL 4.0.17.
| Valeur | Signification |  
| 0 | La semaine commence le Sunday;l'intervalle de valeur de retour va de 0 à !2; la semaine 1 est la première semaine de l'année |  
| 1 | La semaine commence le Monday;l'intervalle de valeur de retour va de 0 à !2; la semaine 1 est la première semaine de l'année qui a plus de trois jours |  
| 2 | La semaine commence le Sunday;l'intervalle de valeur de retour va de 1 à !2; la semaine 1 est la première semaine de l'année |  
| 3 | La semaine commence le Monday;l'intervalle de valeur de retour va de 1 à !2; la semaine 1 est la première semaine de l'année qui a plus de trois jours |  
| 4 | La semaine commence le Sunday;l'intervalle de valeur de retour va de 0 à !2; la semaine 1 est la première semaine de l'année qui a plus de trois jours |  
| 5 | La semaine commence le Monday;l'intervalle de valeur de retour va de 0 à !2; la semaine 1 est la première semaine de l'année |  
| 6 | La semaine commence le Sunday;l'intervalle de valeur de retour va de 1 à !2; la semaine 1 est la première semaine de l'année qui a plus de trois jours |  
| 7 | La semaine commence le Monday;l'intervalle de valeur de retour va de 1 à !2; la semaine 1 est la première semaine de l'année |  Note : en version 4.0,  
WEEK(date,0)
  a été modifiée pour correspondre
au système calendaire des USA. Avant cela,  
WEEK()
  était calculé incorrectement,
pour des dates américaines : en effet,  
WEEK(date)
  et  
WEEK(date,0)
  étaient
incorrects.Si vous préférez que le résultat soit calculé en fonction de l'année qui
contient le premier jour de la semaine de la date utilisée en argument,
vous devriez utiliser les valeurs 2, 3, 6, or 7 de l'argument  
mode
 .| 
mysql> SELECT WEEK('1998-02-20');-> 7
 mysql> SELECT WEEK('1998-02-20',0);
 -> 7
 mysql> SELECT WEEK('1998-02-20',1);
 -> 8
 mysql> SELECT WEEK('1998-12-31',1);
 -> 53
 | 
 Alternativement, utilisez la fonction  
YEARWEEK()
  :| 
mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);-> 2000, 0
 mysql> SELECT WEEK('2000-01-01',2);
 -> 52
 | 
 | 
mysql> SELECT YEARWEEK('2000-01-01');-> 199952
 mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
 -> '52'
 | 
 
WEEKDAY(date)
      Retourne l'index du jour de la semaine, avec la conversion suivante : 
 
date
  ( 
0
  = Lundi,  
1
  = Mardi, ...  
6
  = Dimanche). 
| 
mysql> SELECT WEEKDAY('1997-10-04 22:23:00');-> 5
 mysql> SELECT WEEKDAY('1997-11-05');
 -> 2
 | 
 
WEEKOFYEAR(date)
      
Retourne le numéro de semaine dans l'année, sous forme d'un nombre
compris entre  
1
  et  
53
 . 
WEEKOFYEAR()
  est disponible depuis MySQL 4.1.1.| 
mysql> SELECT WEEKOFYEAR('1998-02-20');-> 8
 | 
 
YEAR(date)
      Retourne l'année de la date  
date
 , dans 
un intervalle de  
1000
  à  
9999
 : 
| 
mysql> SELECT YEAR('98-02-03');-> 1998
 | 
 | 
mysql> SELECT YEAR('98-02-03');-> 1998
 | 
 
YEARWEEK(date)
      
      
YEARWEEK(date,start)
      Retourne l'année et la semaine d'une date. L'argument  
start
  fonctionne
exactement comme l'argument  
start
  de la fonction  
WEEK()
 . Notez
que l'année dans le résultat peut être différente de l'année passée en 
argument, pour la première et la dernière semaine de l'année.
 
Notez que le numéro de semaine est différent de celui que la fonction  
WEEK()
 
retourne ( 
0
 ) pour les arguments optionnels  
0
  ou  
1
 ,
comme  
WEEK()
  puis retourne la semaine dans le contexte de l'année.| 
mysql> SELECT YEARWEEK('1987-01-01');-> 198653
 | 
 |