Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 03/02/2011, 14h35   #1
Invité de passage
 
kéké Magdales
Inscription : février 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : kéké Magdales

Informations forums :
Inscription : février 2011
Messages : 1
Points : 0
Points : 0
Par défaut Conversion heure/minute puis moyenne (AVG)

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 :
  1. une pour transformer les horaires en secondes
  2. 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 :
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 :
Code :
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
Et :
Code :
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
J'espère que cela pourra aider. Pas forcément à les utiliser telles quelles, mais à utiliser la mécanique des fonctions en SQL-Server ^^

Kéké
magdales est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 16h14   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

si @duree est de type varchar(10), ta première fonction peut aussi s'écrire plus simplement ainsi :

Code sql :
1
2
 
DATEDIFF(s,0, '00:' + @Duree)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 10h35   #3
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 138
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 138
Points : 2 466
Points : 2 466
Envoyer un message via Yahoo à zinzineti
on peut aussi trouver des idées ici
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 07h37   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Dans ce cas, le mieux est de stocker l'horaire en float (heure décimale), cela ira beaucoup plus vite pour les calculs d'agrégat.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro 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 05h58.


 
 
 
 
Partenaires

Hébergement Web