Sources MySQLConsultez toutes les sources

Nombre d'auteurs : 10, nombre de sources : 21, dernière mise à jour : 9 octobre 2010 

 
OuvrirSommaireTraitement du temps
précédentsommairesuivant
 
 

Cette fonction prend en paramètre deux valeurs de type TIMESTAMP et retourne le nombre de secondes entre ces deux valeurs.
Il est possible de passer des valeurs de type DATE et l'ordre n'est pas important.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS seconds_between;
DELIMITER $$
CREATE FUNCTION seconds_between (A TIMESTAMP, B TIMESTAMP) RETURNS INT
BEGIN
	DECLARE RETURN_VALUE INT;
	SET RETURN_VALUE = DATEDIFF(A, B) * 24 * 60 * 60 + (TIME_TO_SEC(A) - TIME_TO_SEC(B));
	RETURN IF(RETURN_VALUE > 0, RETURN_VALUE, RETURN_VALUE * -1);
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT seconds_between('2008-11-06 02:10:13', '2008-11-07 02:11:15');
			
Nous obtenons en sortie
Sélectionnez

86462
			

Un peu d'explications

Ici nous avons un écart d'un jour, une minute et deux secondes.
Un jour = 60 secondes * 60 minutes * 24 heures soit 86400 secondes.
Une minute = 60 secondes.
Nous obtenons donc 86400 + 60 + 2 soit 86462 secondes.

Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction prend en paramètre deux valeurs de type TIMESTAMP et retourne le nombre de minutes entre ces deux valeurs.
Il est possible de passer des valeurs de type DATE et l'ordre n'est pas important.
Attention, cette fonction réutilise la fonction seconds_between, il est donc nécessaire d'avoir créé cette dernière, sans quoi une erreur sera retournée. Si vous préférez créer seulement minutes_between, une version équivalente est disponible.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS minutes_between;
DELIMITER $$
CREATE FUNCTION minutes_between (A TIMESTAMP, B TIMESTAMP) RETURNS INT
BEGIN
	RETURN seconds_between(A, B) DIV 60;
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT minutes_between('2008-11-06 02:10:13', '2008-11-07 02:11:15');
			
Nous obtenons en sortie
Sélectionnez

1441
			

Un peu d'explications

Ici nous avons un écart d'un jour, une minute et deux secondes.
Un jour = 60 minutes * 24 heures soit 1440 minutes.
Nous obtenons donc 1440 + 1 soit 1441 minutes.

Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction est strictement équivalente à celle-ci, sauf qu'elle ne dépend pas de seconds_between.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS minutes_between;
DELIMITER $$
CREATE FUNCTION minutes_between (A TIMESTAMP, B TIMESTAMP) RETURNS INT
BEGIN
	DECLARE RETURN_VALUE INT;
	SET RETURN_VALUE = DATEDIFF(A, B) * 24 * 60 * 60 + (TIME_TO_SEC(A) - TIME_TO_SEC(B));
	RETURN (IF(RETURN_VALUE > 0, RETURN_VALUE, RETURN_VALUE * -1)) DIV 60;
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT minutes_between('2008-11-06 02:10:13', '2008-11-07 02:11:15');
			
Nous obtenons en sortie
Sélectionnez

1441
			
Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction prend en paramètre deux valeurs de type TIMESTAMP et retourne le nombre d'heures entre ces deux valeurs.
Il est possible de passer des valeurs de type DATE et l'ordre n'est pas important.
Attention, cette fonction réutilise la fonction minutes_between, il est donc nécessaire d'avoir créé cette dernière sans quoi une erreur sera retournée. Si vous préférez créer seulement hours_between, une version équivalente est disponible.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS hours_between;
DELIMITER $$
CREATE FUNCTION hours_between (A TIMESTAMP, B TIMESTAMP) RETURNS INT
BEGIN
	RETURN minutes_between(A, B) DIV 60;
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT hours_between('2008-11-06 02:10:13', '2008-11-08 05:11:15');
			
Nous obtenons en sortie
Sélectionnez

51
			

Un peu d'explications

Ici nous avons un écart de deux jours, trois heures, une minute et deux secondes.
Deux jours = 24 heures * 2 jours soit 48 heures.
Nous obtenons donc 48 + 3 soit 51 heures.

Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction est strictement équivalente à celle-ci, sauf qu'elle ne dépend pas de minutes_between.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS hours_between;
DELIMITER $$
CREATE FUNCTION hours_between (A TIMESTAMP, B TIMESTAMP) RETURNS INT
BEGIN
	DECLARE RETURN_VALUE INT;
	SET RETURN_VALUE = DATEDIFF(A, B) * 24 * 60 * 60 + (TIME_TO_SEC(A) - TIME_TO_SEC(B));
	RETURN (IF(RETURN_VALUE > 0, RETURN_VALUE, RETURN_VALUE * -1)) DIV (60 * 60);
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT hours_between('2008-11-06 02:10:13', '2008-11-08 05:11:15');
			
Nous obtenons en sortie
Sélectionnez

51
			
Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction prend en paramètre deux valeurs de type DATE et retourne le nombre de jours entre ces deux valeurs.
Il est possible de passer des valeurs de type TIMESTAMP et l'ordre n'est pas important.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS days_between;
DELIMITER $$
CREATE FUNCTION days_between (A DATE, B DATE) RETURNS INT
BEGIN
	DECLARE RETURN_VALUE INT;
	SET RETURN_VALUE = DATEDIFF(A, B);
	RETURN (IF(RETURN_VALUE > 0, RETURN_VALUE, RETURN_VALUE * -1));
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT days_between('2008-9-06', '2008-11-08');
			
Nous obtenons en sortie
Sélectionnez

63
			

Un peu d'explications

Ici nous voulons calculer le nombre de jours entre le 6 septembre 2008 et le 8 novembre 2008.
Nombre de jours en septembre = 30.
Nombre de jours en octobre = 31.
Nous obtenons donc (30 - 6) + 31 + 8 soit 63 jours.

Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction prend en paramètre deux valeurs de type DATE et retourne le nombre de mois entre ces deux valeurs.
Il est possible de passer des valeurs de type TIMESTAMP et l'ordre n'est pas important.
L'écriture de cette fonction a été fortement inspirée par celle de Nathan Bunker.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS months_between;
DELIMITER $$
CREATE FUNCTION months_between (A DATE, B DATE) RETURNS INT
BEGIN
	DECLARE FIRST_DATE DATE;
	DECLARE LAST_DATE DATE;
	DECLARE DIFF INT;
	SELECT IF(A > B, A, B) INTO LAST_DATE;
	SELECT IF(A < B, A, B) INTO FIRST_DATE;
	SET DIFF = PERIOD_DIFF(year(LAST_DATE)*100 + month(LAST_DATE), year(FIRST_DATE)*100 + month(FIRST_DATE));
	SET DIFF = IF(DAY(FIRST_DATE) <= DAY(LAST_DATE), DIFF, DIFF - 1); 
	RETURN DIFF;
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT months_between('2008-11-08', '2009-2-06');
			
Nous obtenons en sortie
Sélectionnez

2
			

Un peu d'explications

Ici nous voulons calculer le nombre de mois entre le 8 novembre 2008 et le 6 septembre 2009.
Liste des mois complets = decembre 2008, janvier 2008.
Ensuite entre le 8 et le 6 de deux mois il n'y a pas un mois complet (à deux jours près).
Nous obtenons donc 2 mois.

Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction prend en paramètre deux valeurs de type DATE et retourne le nombre d'années entre ces deux valeurs.
Il est possible de passer des valeurs de type TIMESTAMP et l'ordre n'est pas important.
Attention, cette fonction réutilise la fonction months_between, il est donc nécessaire d'avoir créé cette dernière, faute de quoi une erreur sera retournée. Si vous préférez créer seulement years_between, une version équivalente est disponible.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS years_between;
DELIMITER $$
CREATE FUNCTION years_between (A DATE, B DATE) RETURNS INT
BEGIN
	RETURN months_between(A, B) DIV 12;
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT years_between('2008-9-06', '2012-11-08');
			
Nous obtenons en sortie
Sélectionnez

4
			
Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

Cette fonction est strictement équivalente à celle-ci, sauf qu'elle ne dépend pas de months_between.

Script de création de la fonction
Sélectionnez

DROP FUNCTION IF EXISTS years_between;
DELIMITER $$
CREATE FUNCTION years_between (A DATE, B DATE) RETURNS INT
BEGIN
	DECLARE FIRST_DATE DATE;
	DECLARE LAST_DATE DATE;
	DECLARE DIFF INT;
	SELECT IF(A > B, A, B) INTO LAST_DATE;
	SELECT IF(A < B, A, B) INTO FIRST_DATE;
	SET DIFF = PERIOD_DIFF(year(LAST_DATE)*100 + month(LAST_DATE), year(FIRST_DATE)*100 + month(FIRST_DATE));
	SET DIFF = IF(DAY(FIRST_DATE) <= DAY(LAST_DATE), DIFF, DIFF - 1); 
	RETURN DIFF DIV 12;
END
$$

DELIMITER ;
		
Exemple d'utilisation
Sélectionnez

SELECT years_between('2008-9-06', '2012-11-08');
			
Nous obtenons en sortie
Sélectionnez

4
			
Créé le 9 novembre 2008  par Alain Defrance

Page de l'auteur

précédentsommairesuivant
 
 
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.