Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2011, 11h24   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 111
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 111
Points : 12
Points : 12
Par défaut Compter le nombre de jour par mois d'un événement.

Bonjour,

j'ai un événement, représenté par une table. Cette table possède les champs date_debut et date_fin, au format datetime. Je cherche une requête qui me retourne le nombre de jours pour chaque mois où l'événement a lieu.

Par exemple, un événement se déroule du 14 janvier au 7 février je veux avoir comme résultat :

Mois;Jours
1;18
2;7
Siriru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 06h17   #2
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 845
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 845
Points : 1 320
Points : 1 320
Salut, y a qu'une fonction stockée pour te faire ça...

je crée la base common juste pour y mettre la fonction, si tu dois t'en servir dans différentes bases c'est plus simple. Sinon tu fais un use sur la base voulue et tu n'est pas obligé de préfixé avec le nom de ta base avant l'appel à la fonction.



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DROP DATABASE IF EXISTS common;
CREATE DATABASE common DEFAULT character SET utf8 collate utf8_general_ci;
USE common;
 
delimiter |
 
CREATE FUNCTION periodes(debut datetime,fin datetime) returns text deterministic
begin
	declare duree int(4) DEFAULT datediff(fin,debut);
	declare retour text;
	declare t char(7);
	declare e int(4);
	while debut<fin do
		SET e=datediff(last_day(debut),debut)+1;
		SET t=LEFT(debut,7);
		SET debut=date_add(debut, interval e day);
		SET duree=duree-e;
		SET retour=concat_ws("#",retour,concat(t,";",IF(debut<fin,e,duree+e+1)));
	end while;
	RETURN retour;
end|
 
delimiter ;
 
SELECT common.periodes("2010-01-14","2010-02-07");
Ici, tes résultats sont donc séparés par "#"... on ne peut sortir un jeu de résultats donc on les concatène... c'est facile à parser ou à scinder ensuite en sql ou php...
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 11h56   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 111
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 111
Points : 12
Points : 12
Merci pour ta réponse, je vais tester ça !
Siriru est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h18.


 
 
 
 
Partenaires

Hébergement Web