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 :
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(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
.
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.
-
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
.
mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31'
|
DATE()
est disponible depuis MySQL 4.1.1.
-
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.
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.
-
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 :
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.
-
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.
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 Syntaxe de
SET
.
-
HOUR(time)
-
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
|
-
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.
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
-
-
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
.
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.
-
MAKETIME(hour,minute,second)
-
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.
-
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
.
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.
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
.
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(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
.
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()
-
SYSDATE()
est un synonyme de
NOW()
.
-
TIME(expr)
-
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(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.
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.
-
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
:
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 Types temporels .
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é. Fonctions de transtypage .
-
UTC_DATE
-
-
UTC_DATE()
-
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.
-
UTC_TIME
-
-
UTC_TIME()
-
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.
-
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 :
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'
|
-
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
.
mysql> SELECT WEEKOFYEAR('1998-02-20'); -> 8
|
WEEKOFYEAR()
est disponible depuis MySQL 4.1.1.
-
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.
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.
|