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/05/2011, 12h21   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 468
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 468
Points : 11
Points : 11
Par défaut [MSSQL server 2000]Somme d'heures.

Bonjour à tous,

Je suis dans un environnement MS SQL SERVER 2000

J'ai 4 champs composé de cette maniéré:

Code :
1
2
hdm hfm hda hfa
8.00 12.00 13.45 17.30
hdm Heure Début Matin
hfm Heure Fin Matin
hda Heure Début apres midi
hfa Heure Fin Apres midi

Je voudrait réaliser la somme des heures sous la forme HH (heure) et CC (centième). Pour arriver par exemple à la somme de 7.75

Est-ce possible ?

Merci d'avance pour votre aide

guigui69
guigui69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 13h16   #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

Que donne ceci :

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT
    CAST(
        DATEDIFF (
            MINUTE,
            hdm,
            hfm 
        )
        + 
        DATEDIFF (
            MINUTE,
            hda,
            hfa 
        )
    AS FLOAT )
    /60
FROM MaTable
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h43   #3
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 468
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 468
Points : 11
Points : 11
Merci pour votre réponse.

Mais cela ne fonctionne pas il me retourne un chiffre comme 5000,

Je pense qu'il croit que 12.00 c'est 12 jour alors que c'est 12h00 et 8.00 c'est 8h.

Comment lui dire que 12.00 c'est des heures.
guigui69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h52   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Quel le type de vos données ?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 18h05   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 468
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 468
Points : 11
Points : 11
>Type Numeric (5(4.2).
guigui69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 18h34   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par guigui69 Voir le message
>Type Numeric (5(4.2).
Effectivement, pourquoi prendre un type adapté avec les fonctions directement implémentées et testées directement disponible au lieu d'avoir à tout refaire comme c'est ton cas...

Changer tout de suite le type de vos données, si c'est encore possible!

Et la partie décimale c'est des minutes (0.30 = 30 minutes) ou des ratios d'heures (0.33 = 20 minutes) ?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 13h08   #7
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 468
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 468
Points : 11
Points : 11
Impossible à changer c'est notre outil SI.
guigui69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h42   #8
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par guigui69 Voir le message
Impossible à changer c'est notre outil SI.
C'est cool

En partant du principe que ton champ 18.20 (en numeric) corresponde à 18h20 en date, regarde ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
declare @H1 numeric(5,2), @H2 numeric(5,2),
	@D1 datetime, @D2 datetime
 
SET @H1 = 7.22
SET @H2 = 19.57
 
SET @D1 = dateadd( minute, 60*floor(@H1) + 100*@H1 - floor(@H1) *100 , 0) 
SET @D2 = dateadd( minute, 60*floor(@H2) + 100*@H2 - floor(@H2) *100 , 0) 
 
SELECT @H1 heure1_type_numeric, @D1 heure1_type_date, 
	@H2 heure2_type_numeric, @D2 heure2_type_date, 
	@D1 + @D2 somme_type_date , 
	cast( datediff (minute, 0 , @D1 + @D2 ) / 100.0 AS numeric (5,2) ) somme_type_numeric
Attention aux heures qui ne sont pas sur le même jour...
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h52   #9
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
à partir de votre exemple initial, je suppose que les centièmes représentent en effet des minutes et non des centièmes d'heure, histoire de finir de compliquer ce qui aurait pu être très simple

donc :

Code SQL :
1
2
3
4
5
6
7
8
9
10
 
SELECT 
		((hfm - FLOOR(hfm)) / 60 * 100 + FLOOR(hfm))
		-
		((hdm - FLOOR(hdm)) / 60 * 100 + FLOOR(hdm))
		+
		((hfa - FLOOR(hfa)) / 60 * 100 + FLOOR(hfa))
		-
		((hda - FLOOR(hda)) / 60 * 100 + FLOOR(hda))
FROM MaTable
aieeeuuuuu 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 07h35.


 
 
 
 
Partenaires

Hébergement Web