Cette section décrit les fonctions qui peuvent être utilisées pour manipuler les valeurs temporelles. Voir Section 11.3, « Les types date et heure » 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 :
mysql> SELECT quelquechose FROM nom_de_table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
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.
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()
.
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'
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 ADDDATE('1998-01-02', 31);
-> '1998-02-02'
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
.
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'
ADDTIME()
a été ajouté en MySQL 4.1.1.
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
et
CURRENT_DATE()
sont synonymes de
CURDATE()
.
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
et
CURRENT_TIME()
sont synonymes de
CURTIME()
.
CURRENT_TIMESTAMP
,
CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP
et
CURRENT_TIMESTAMP()
sont synonymes de
NOW()
.
Extrait la partie date de l'expression expr
de type DATE
ou
DATETIME
.
mysql> SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31'
DATE()
est disponible depuis MySQL 4.1.1.
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.
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
DATEDIFF()
est disponible depuis MySQL
4.1.1.
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
:
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' |
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.
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
:
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'
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.
Notez que si vous ajoutez ou soustrayez à une valeur de type
DATE
des horaires, le résultat sera
automatiquement au format DATETIME
:
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'
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('1998-01-30', interval 1 month);
-> '1998-02-28'
Notez que dans l'exemple précédent, le mot clé
INTERVAL
et le spécificateur
type
sont insensibles à la casse.
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()
est un synonyme de
DAYOFMONTH()
. Cette fonction est disponible
depuis MySQL 4.1.1.
Retourne le nom du jour de la semaine de
date
:
mysql> SELECT DAYNAME('1998-02-05');
-> 'Thursday'
Retourne le jour de la date date
, dans un
intervalle de 1
à 31
:
mysql> SELECT DAYOFMONTH('1998-02-03');
-> 3
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
Retourne le jour de la date date
, dans un
intervalle de 1
à
366
:
mysql> SELECT DAYOFYEAR('1998-02-03');
-> 34
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
Retourne la date correspondant au nombre de jours
(N
) depuis la date 0 :
mysql> SELECT FROM_DAYS(729669);
-> '1997-10-07'
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.
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.
mysql>SELECT FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00' mysql>SELECT FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
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(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()
) :
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' |
Le format ISO est le format ISO 9075, et non ISO 8601.
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
GET_FORMAT()
est disponible depuis MySQL
4.1.1. Voyez See Section 13.5.2.8, « Syntaxe de SET
».
Retourne le nombre d'heures pour l'heure
time
, dans un intervalle de
0
à 23
:
mysql> SELECT HOUR('10:05:03');
-> 10
Cependant, l'intervalle des valeurs TIME
est bien plus grand, et donc, HOUR
peut
retourner des valeurs plus grandes que
23
:
mysql> SELECT HOUR('272:59:59');
-> 272
Prend une valeur de format DATE
ou
DATETIME
, et retourne le dernier jour du
mois correspondant. Retourne NULL
si
l'argument est invalide.
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
LAST_DAY()
est disponible depuis MySQL
4.1.1.
LOCALTIME
et LOCALTIME()
sont synonymes de NOW()
.
LOCALTIMESTAMP
,
LOCALTIMESTAMP()
LOCALTIMESTAMP
et
LOCALTIMESTAMP()
sont synonymes de
NOW()
.
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
.
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
MAKEDATE()
est disponible depuis MySQL
4.1.1.
Retourne une valeur de format TIME
,
calculée à partir des arguments hour
,
minute
et second
.
mysql> SELECT MAKETIME(12,15,30);
-> '12:15:30'
MAKETIME()
est disponible depuis MySQL
4.1.1.
Retourne le nombre de microsecondes dans l'expression de type
TIME
ou DATETIME
expr
, sous la forme d'un nombre entre
0
et 999999
.
mysql>SELECT MICROSECOND('12:00:00.123456');
-> 123456 mysql>SELECT MICROSECOND('1997-12-31 23:59:59.000010');
-> 10
MICROSECOND()
est disponible depuis MySQL
4.1.1.
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
Retourne le numéro du mois de la date
date
, dans un intervalle de
1
à 12
:
mysql> SELECT MONTH('1998-02-03');
-> 2
Retourne le nom du mois de la date date
:
mysql> SELECT MONTHNAME("1998-02-05");
-> 'February'
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
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
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
Retourne le numéro du trimestre de la date
date
, dans un intervalle de
1
à 4
:
mysql> SELECT QUARTER('98-04-01');
-> 2
Retourne le nombre de secondes pour l'heure
time
, dans un intervalle de
0
à 59
:
mysql> SELECT SECOND('10:05:03');
-> 3
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
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
.
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
STR_TO_DATE()
est disponible depuis MySQL
4.1.1.
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()
.
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'
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 SUBDATE('1998-01-02 12:00:00', 31);
-> '1997-12-02 12:00:00'
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
.
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'
SUBTIME()
a été ajoutée en MySQL 4.1.1.
SYSDATE()
est un synonyme de
NOW()
.
Extrait la partie horaire de l'expression
expr
, de type TIME
ou
DATETIME
.
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'
TIME()
a été ajoutée en MySQL 4.1.1.
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.
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'
TIMEDIFF()
a été ajoutée en MySQL 4.1.1.
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
.
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'
TIMESTAMP()
a été ajoutée en MySQL
4.1.1.
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.
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'
TIMESTAMPADD()
a été ajoutée en MySQL
5.0.0.
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()
.
mysql>SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3 mysql>SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
TIMESTAMPDIFF()
a été ajoutée en MySQL
5.0.0.
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'
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
Retourne le nombre de jours depuis la date 0 jusqu'à la date
date
:
mysql>SELECT TO_DAYS(950501);
-> 728779 mysql>SELECT TO_DAYS('1997-10-07');
-> 729669
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.
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
Section 11.3, « Les types date et heure ». Par exemple,
'1997-10-07'
et
'97-10-07'
sont identiques :
mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');
-> 729669, 729669
Pour les dates antérieures à 1582, les résultats sont indéfinis.
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 :
mysql>SELECT UNIX_TIMESTAMP();
-> 882226357 mysql>SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
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é. See
Section 12.7, « Fonctions de transtypage ».
Retourne la date UTC courante au format
'YYYY-MM-DD'
ou YYYYMMDD
suivant le contexte numérique ou chaîne :
mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
-> '2003-08-14', 20030814
UTC_DATE()
est disponible depuis MySQL
4.1.1.
Retourne l'heure UTC courante au format
'HH:MM:SS'
or HHMMSS
suivant le contexte numérique ou chaîne :
mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
-> '18:07:53', 180753
UTC_TIME()
est disponible depuis MySQL
4.1.1.
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 :
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
-> '2003-08-14 18:08:04', 20030814180804
UTC_TIMESTAMP()
est disponible depuis MySQL
4.1.1.
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é. See Section 13.5.2.8, « Syntaxe de SET
».
Voici un tableau explicatif sur le fonctionnement du second argument :
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 |
Le mode
3 est disponible depuis MySQL
4.0.5. Le mode
4 est disponible depuis
MySQL 4.0.17.
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
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 YEAR('2000-01-01'), WEEK('2000-01-01',0);
-> 2000, 0 mysql>SELECT WEEK('2000-01-01',2);
-> 52
Alternativement, utilisez la fonction
YEARWEEK()
:
mysql>SELECT YEARWEEK('2000-01-01');
-> 199952 mysql>SELECT MID(YEARWEEK('2000-01-01'),5,2);
-> '52'
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
Retourne le numéro de semaine dans l'année, sous forme d'un
nombre compris entre 1
et
53
.
mysql> SELECT WEEKOFYEAR('1998-02-20');
-> 8
WEEKOFYEAR()
est disponible depuis MySQL
4.1.1.
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.
mysql> SELECT YEARWEEK('1987-01-01');
-> 198653
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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.