un passage quasi-obligatoire pour faire des sites web dynamiques

15.Les fonctions SQL

15.4.Les fonctions SQL de manipulation de date

15.4.1.La date et/ou l'heure courante

CURDATE()MySQL
Retourne la date courante au format AAAA-MM-JJ (ou AAAAMMJJ si le résultat est converti en entier)
remUtilisez plutôt CURRENT_DATE qui est plus standard.
SELECT CURDATE(),CURDATE()+0
CURDATE() CURDATE()+0
2001-07-29 20010729
CURRENT_DATEMySQL|PostgreSQL
Retourne la date courante au format AAAA-MM-JJ (ou AAAAMMJJ si le résultat est converti en entier)
remMySQL accepte aussi bien CURRENT_DATE (en tant que variable) que CURRENT_DATE() (en tant que fonction) mais la conversion en entier ne peut s'appliquer qu'à la fonction. Le comportement de PostgreSQL sur ce dernier point n'a pas été vérifié.
SELECT CURRENT_DATE,CURRENT_DATE()+0
CURRENT_DATE CURRENT_DATE()+0
2001-07-29 20010729
CURRENT_TIMEMySQL|PostgreSQL
Retourne l'heure courante au format HH:MM:SS (ou HHMMSS si le résultat est converti en entier)
remREM: MySQL accepte aussi bien CURRENT_TIME (en tant que variable) que CURRENT_TIME() (en tant que fonction) mais la conversion en entier ne peut s'appliquer qu'à la fonction. Le comportement de PostgreSQL sur ce dernier point n'a pas été vérifié.
SELECT CURRENT_TIME,CURRENT_TIME()+0
CURRENT_TIME CURRENT_TIME()+0
18:20:07 182007
CURRENT_TIMESTAMPMySQL|PostgreSQL
Retourne la date courante au format AAAA-MM-JJ HH:MM:SS (ou AAAAMMJJHHMMSS si le résultat est converti en entier)
remMySQL accepte aussi bien CURRENT_TIMESTAMP (en tant que variable) que CURRENT_TIMESTAMP() (en tant que fonction) mais la conversion en entier ne peut s'appliquer qu'à la fonction. Le comportement de PostgreSQL sur ce dernier point n'a pas été vérifié.
SELECT CURRENT_DATE,CURRENT_DATE()+0
CURRENT_TIMESTAMP CURRENT_TIMESTAMP()+0
2001-07-29 18:20:07 20010729182007
CURTIME() (MySQL)MySQL
Retourne l'heure courante au format HH:MM:SS (ou HHMMSS si le résultat est converti en entier)
remUtilisez plutôt CURRENT_TIME qui est plus standard.
SELECT CURTIME(),CURTIME()+0
CURTIME() CURTIME()+0
18:20:07 182007
MOD(nombre1,nombre2)MySQL|Oracle|PostgreSQL
Retourne le reste de la division de "nombre1" par "nombre2"
NOW()MySQL
Retourne la date courante au format AAAA-MM-JJ HH:MM:SS (ou AAAAMMJJHHMMSS si le résultat est converti en entier)
remUtilisez plutôt CURRENT_TIMESTAMP qui est plus standard.
SELECT NOW(),NOW()+0
NOW() NOW()+0
2001-07-29 18:20:07 20010729182007
SQRT(nombre)MySQL|Oracle|PostgreSQL
Retourne la racine carrée de "nombre"
remAvec PostgreSQL cette dernière DOIT être de type "float"
SYSDATE()MySQL
Retourne la date courante au format AAAA-MM-JJ HH:MM:SS (ou AAAAMMJJHHMMSS si le résultat est converti en entier)
remUtilisez plutôt CURRENT_TIMESTAMP qui est plus standard.
SELECT SYSDATE(),SYSDATE()+0
SYSDATE() SYSDATE()+0
2001-07-29 18:20:07 20010729182007
UNIX_TIMESTAMP()MySQL
Retourne le nombre de secondes écoulées depuis le 1er Janvier 1970
SELECT UNIX_TIMESTAMP()
UNIX_TIMESTAMP()
996423607

15.4.2.Les fonctions d'opérations sur les dates

ADDDATE(date, INTERVAL interval)MySQL
Ajoute un interval de temps à "date".
SELECT monchamp, ADDDATE(monchamp, INTERVAL 1 SECOND) FROM matable
monchamp ADDDATE(monchamp, INTERVAL 1 SECOND)
2001-01-01 20:00:00 2001-01-01 20:00:01
SELECT monchamp, ADDDATE(monchamp, INTERVAL 1 MINUTE) FROM matable
monchamp ADDDATE(monchamp, INTERVAL 1 MINUTE)
2001-01-01 20:00:00 2001-01-01 20:01:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL 1 HOUR) FROM matable
monchamp ADDDATE(monchamp, INTERVAL 1 HOUR)
2001-01-01 20:00:00 2001-01-01 21:00:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL 1 DAY) FROM matable
monchamp ADDDATE(monchamp, INTERVAL 1 DAY)
2001-01-01 20:00:00 2001-01-02 20:00:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL 1 MONTH) FROM matable
monchamp ADDDATE(monchamp, INTERVAL 1 MONTH)
2001-01-01 20:00:00 2001-02-01 20:00:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL 1 YEAR) FROM matable
monchamp ADDDATE(monchamp, INTERVAL 1 YEAR)
2001-01-01 20:00:00 2002-01-01 20:00:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL "01:02" MINUTE_SECOND) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01:02" MINUTE_SECOND)
2001-01-01 20:00:00 2001-01-01 20:01:02
SELECT monchamp, ADDDATE(monchamp, INTERVAL "01:02" HOUR_MINUTE) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01:02" HOUR_MINUTE)
2001-01-01 20:00:00 2001-01-01 21:02:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL "01 02" DAY_HOUR) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01 02" DAY_HOUR)
2001-01-01 20:00:00 2001-01-02 22:00:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL "01-02" YEAR_MONTH) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01-02" YEAR_MONTH)
2001-01-01 20:00:00 2002-03-01 20:00:00
SELECT monchamp, ADDDATE(monchamp, INTERVAL "01:02:03" HOUR_SECOND) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01:02:03" HOUR_SECOND)
2001-01-01 20:00:00 2001-01-01 21:02:03
SELECT monchamp, ADDDATE(monchamp, INTERVAL "01 02:03" DAY_MINUTE) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01 02:03" DAY_MINUTE)
2001-01-01 20:00:00 2001-01-02 22:03:00
SELECT monchamp,ADDDATE(monchamp, INTERVAL "01 02:03:04" DAY_SECOND) FROM matable
monchamp ADDDATE(monchamp, INTERVAL "01 02:03:04" DAY_SECOND)
2001-01-01 20:00:00 2001-01-02 22:03:04
DATE_ADD(date, INTERVAL interval)MySQL
Cf. ADDDATE(date, INTERVAL interval)

15.4.3.Les autres fonctions

DAYOFMONTH(date) (MySQL)
retourne le numéro du jour par rapport au mois de "date"
DAYOFWEEK(date) (MySQL)
retourne le numéro du jour par rapport à la semaine de "date" (commence à Dimanche=1)
DAYOFYEAR(date) (MySQL)
retourne le numéro du jour par rapport à l"année de "date"
DATE_FORMAT(date,format) (MySQL)
retourne la date "date" au format spécifié par "format"
DATE_SUB(date,INTERVAL interval) (MySQL)
Ote un interval de temps à "date"
FROM_DAYS(entier) (MySQL)
retourne la date correspondant à "entier" jours depuis l'an 0
FROM_UNIXTIME(entier) (MySQL)
retourne la date "entier" exprimée en secondes depuis le 1er Janvier 1970 au format AAAA-MM-JJ HH:MM:SS (ou AAAAMMJJHHMMSS s'il est converti en entier)
FROM_UNIXTIME(entier,format) (MySQL)
retourne la date "entier" exprimée en secondes depuis le 1er Janvier 1970 au format spécifié par "format"
HOUR(heure) (MySQL)
retourne l'heure (0-23) de "heure"
MINUTE(heure) (MySQL)
retourne le champ minute de "heure"
MONTH(date) (MySQL)
retourne le mois de "date"
MONTHNAME(date) (MySQL)
retourne le mois de "date" en toutes lettres
PERIOD_ADD(periode,entier) (MySQL)
ajoute "entier" mois à "periode", où période represente un mois au format AAMM ou AAAAMM, retourne une periode au format AAAAMM
PERIOD_DIFF(periode1,periode2) (MySQL)
retourne le nombre de mois entre "periode1" et "periode2"
QUARTER(date) (MySQL)
retourne le numéro du trimestre de "date"
SEC_TO_TIME(entier) (MySQL)
retourne l'heure "entier" exprimée en seconde au format HH:MM:SS (ou HHMMSS s'il est converti en entier)
SECOND(heure) (MySQL)
retourne le champ seconde de "heure"
SUBDATE(date,INTERVAL interval) (MySQL)
Ote un interval de temps à "date"
TIME_FORMAT(heure,format) (MySQL)
retourne l'heure "heure" au format spécifié par "format"
TIME_TO_SEC(heure) (MySQL)
converti l'heure en secondes
TO_DAYS(date) (MySQL)
converti la date en nombre de jours depuis l'année 0
UNIX_TIMESTAMP(date) (MySQL)
Retourne le nombre de secondes entre le 1er Janvier 1970 et "date"
UNIX_TIMESTAMP('2001-01-01 20:00:00')
978375600
SELECT UNIX_TIMESTAMP('2001-01-01 20:00:00')
WEEK(date) (MySQL)
retourne le numéro de la semaine par rapport à l'année de "date"
WEEK(date,entier) (MySQL)
retourne le numéro de la semaine par rapport à l'année de "date", si entier=0 la semaine débute le Dimanche, si entier=1 la semaine débute le Lundi
WEEKDAY(date) (MySQL)
retourne le numéro du jour par rapport à la semaine de "date" (commence à Lundi=0)
YEAR(date) (MySQL)
retourne l'année de "date"
YEARWEEK(date) (MySQL)
retourne l'année et le numéro de la semaine par rapport à l'année de "date"
YEARWEEK(date,entier) (MySQL)
retourne l'année et le numéro de la semaine par rapport à l'année de "date", si entier=0 la semaine débute le Dimanche, si entier=1 la semaine débute le Lundi