Bonjour,
J'avais un besoin similaire à ce problème sous Oracle mais comme il m'a permis d'avancer, je préfère vous donner la solution que j'ai retenue.
J'avais des suites de temps de résolution de la forme 45:25, 25:34 indiquant des minutes et des secondes.
Mon objectif était de les moyenner.
J'ai donc créé deux fonctions :
- une pour transformer les horaires en secondes
- une pour transformer des secondes selon le format horaire
Entre les deux, une simple moyenne à calculer.
Voilà la méthode d'utilisation pour calculer une moyenne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT dbo.transformation_seconde_en_MM_SS(AVG(dbo.transformation_MM_SS_en_seconde (Tps) )) as tps_moyen_conv_global FROM dbo.Pilotage WHERE dateappels >= '20110101' AND dateappels < '20110201'
Mes deux fonctions sont les suivantes :
Et :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 -- Fonction créée pour www.magdales.com CREATE FUNCTION [dbo].[transformation_MM_SS_en_seconde] ( @duree varchar(10) ) RETURNS int AS BEGIN return SUBSTRING(@duree, 1, CHARINDEX(':', @duree) - 1) *60 + REVERSE ( SUBSTRING( REVERSE(@duree),1, CHARINDEX(':', REVERSE(@duree)) -1 )) END
J'espère que cela pourra aider. Pas forcément à les utiliser telles quelles, mais à utiliser la mécanique des fonctions en SQL-Server ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 -- Fonction créé pour www.magdales.com CREATE FUNCTION [dbo].[transformation_seconde_en_MM_SS] ( @duree int ) RETURNS varchar(10) AS BEGIN return cast (@duree/60 as varchar(10))+ ':' + RIGHT('00'+ cast ( @duree % 60 as varchar(10) ), 2) END
Kéké
Partager