OVH Cloud OVH Cloud

Site sql concernant manipulation des données en heure

9 réponses
Avatar
Loïc
Bonjour,

Connaissez vous un site concernant SQL Server est de façon plus spécifique
les manipulation de donnée de type DateTime.

Je dois sommer des heures et ma solution semble être non optimisée ni
pratique, (addition des minutes et des heures en utilisant datepart :())
!!!!.

Merci d'avance
Loïc

9 réponses

Avatar
deconnected
Je suppose que dateadd() ne te convient pas.
Peux-tu donner plus d'explications sur ton probleme ?


DATEADD ( datepart , number, date )
exemple:
select dateadd(hour,1,getdate())


"Loïc" a écrit dans le message de
news:eX$
Bonjour,

Connaissez vous un site concernant SQL Server est de façon plus spécifique
les manipulation de donnée de type DateTime.

Je dois sommer des heures et ma solution semble être non optimisée ni
pratique, (addition des minutes et des heures en utilisant datepart :())
!!!!.

Merci d'avance
Loïc




Avatar
Loïc
Salut, merci pour la réponse rapide.

En fait, très con comme problème, je fais du développement depuis quelques
temps, et j'ai toujours à l'esprit d'utiliser le code le plus optimisé
possible et surtout ne pas réinventer la roue et là je suis en train de me
prendre la tête pour quelque chose d'hyper simple....

Voici de quoi il s'agit. Imaginons une table composée de colonnes :
HeureDeb, HeureFin, TotalHeure

TotalHeure est une colonne alimentée comme il se doit par la difference
entre HeureFin et HeureDeb (simplicité enfantine n'est ce pas ;)).
Maintenant que j'ai mon résultat dans cette colonne j'aimerais sommer
celle-ci, donc comme mon type de donnée est en datetime mes données sont
stockée sous la forme : aaaa-mm-aa hh:mm:sss, alors le plus compliqué que
j'ai trouvé est de faire la chose suivante :

SELECT SUM(DATEPART(minute,TotalHeure))/60 FROM TotalHeure =>pour les
minutes
SELECT SUM(DATEPART(hour,TotalHeure)) FROM TotalHeure

Il va s'en dire que cette solution ne me convient pas du tout, non seulement
parcque j'ai l'impression de bricoler :) et d'autre part car je pense qu'une
solution plus pro existe ;).

Merci de ta patience et des informations que tu pourras m'apporter
Meilleures salutations
Loïc


"deconnected" a écrit dans le message de
news:%
Je suppose que dateadd() ne te convient pas.
Peux-tu donner plus d'explications sur ton probleme ?


DATEADD ( datepart , number, date )
exemple:
select dateadd(hour,1,getdate())


"Loïc" a écrit dans le message de
news:eX$
> Bonjour,
>
> Connaissez vous un site concernant SQL Server est de façon plus


spécifique
> les manipulation de donnée de type DateTime.
>
> Je dois sommer des heures et ma solution semble être non optimisée ni
> pratique, (addition des minutes et des heures en utilisant datepart :())
> !!!!.
>
> Merci d'avance
> Loïc
>
>




Avatar
Patrice
Essaie :

SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM TotalHeure

Patrice

--

"Loïc" a écrit dans le message de
news:
Salut, merci pour la réponse rapide.

En fait, très con comme problème, je fais du développement depuis quelques
temps, et j'ai toujours à l'esprit d'utiliser le code le plus optimisé
possible et surtout ne pas réinventer la roue et là je suis en train de me
prendre la tête pour quelque chose d'hyper simple....

Voici de quoi il s'agit. Imaginons une table composée de colonnes :
HeureDeb, HeureFin, TotalHeure

TotalHeure est une colonne alimentée comme il se doit par la difference
entre HeureFin et HeureDeb (simplicité enfantine n'est ce pas ;)).
Maintenant que j'ai mon résultat dans cette colonne j'aimerais sommer
celle-ci, donc comme mon type de donnée est en datetime mes données sont
stockée sous la forme : aaaa-mm-aa hh:mm:sss, alors le plus compliqué que
j'ai trouvé est de faire la chose suivante :

SELECT SUM(DATEPART(minute,TotalHeure))/60 FROM TotalHeure =>pour les
minutes
SELECT SUM(DATEPART(hour,TotalHeure)) FROM TotalHeure

Il va s'en dire que cette solution ne me convient pas du tout, non


seulement
parcque j'ai l'impression de bricoler :) et d'autre part car je pense


qu'une
solution plus pro existe ;).

Merci de ta patience et des informations que tu pourras m'apporter
Meilleures salutations
Loïc


"deconnected" a écrit dans le message de
news:%
> Je suppose que dateadd() ne te convient pas.
> Peux-tu donner plus d'explications sur ton probleme ?
>
>
> DATEADD ( datepart , number, date )
> exemple:
> select dateadd(hour,1,getdate())
>
>
> "Loïc" a écrit dans le message de
> news:eX$
> > Bonjour,
> >
> > Connaissez vous un site concernant SQL Server est de façon plus
spécifique
> > les manipulation de donnée de type DateTime.
> >
> > Je dois sommer des heures et ma solution semble être non optimisée ni
> > pratique, (addition des minutes et des heures en utilisant datepart


:())
> > !!!!.
> >
> > Merci d'avance
> > Loïc
> >
> >
>
>




Avatar
Loïc
Salut merci pour la solution mais celle-ci me renvoie un résultat erroné. En
effet, le SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM
TotalHeure me renvoie un total de 05:45:00 alors que j'ai en tout cas pour 9
heure de total, et lorsque je décortique la requête de cette manière SELECT
(SUM(CAST(TotalHeure AS FLOAT))) FROM TotalHeure cela me
renvoie -88.7604166666667 !!!!!!!!!

Quezako ?

Salutations
Loïc
"Patrice" a écrit dans le message de
news:
Essaie :

SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM TotalHeure

Patrice

--

"Loïc" a écrit dans le message de
news:
> Salut, merci pour la réponse rapide.
>
> En fait, très con comme problème, je fais du développement depuis


quelques
> temps, et j'ai toujours à l'esprit d'utiliser le code le plus optimisé
> possible et surtout ne pas réinventer la roue et là je suis en train de


me
> prendre la tête pour quelque chose d'hyper simple....
>
> Voici de quoi il s'agit. Imaginons une table composée de colonnes :
> HeureDeb, HeureFin, TotalHeure
>
> TotalHeure est une colonne alimentée comme il se doit par la difference
> entre HeureFin et HeureDeb (simplicité enfantine n'est ce pas ;)).
> Maintenant que j'ai mon résultat dans cette colonne j'aimerais sommer
> celle-ci, donc comme mon type de donnée est en datetime mes données sont
> stockée sous la forme : aaaa-mm-aa hh:mm:sss, alors le plus compliqué


que
> j'ai trouvé est de faire la chose suivante :
>
> SELECT SUM(DATEPART(minute,TotalHeure))/60 FROM TotalHeure =>pour les
> minutes
> SELECT SUM(DATEPART(hour,TotalHeure)) FROM TotalHeure
>
> Il va s'en dire que cette solution ne me convient pas du tout, non
seulement
> parcque j'ai l'impression de bricoler :) et d'autre part car je pense
qu'une
> solution plus pro existe ;).
>
> Merci de ta patience et des informations que tu pourras m'apporter
> Meilleures salutations
> Loïc
>
>
> "deconnected" a écrit dans le message de
> news:%
> > Je suppose que dateadd() ne te convient pas.
> > Peux-tu donner plus d'explications sur ton probleme ?
> >
> >
> > DATEADD ( datepart , number, date )
> > exemple:
> > select dateadd(hour,1,getdate())
> >
> >
> > "Loïc" a écrit dans le message de
> > news:eX$
> > > Bonjour,
> > >
> > > Connaissez vous un site concernant SQL Server est de façon plus
> spécifique
> > > les manipulation de donnée de type DateTime.
> > >
> > > Je dois sommer des heures et ma solution semble être non optimisée


ni
> > > pratique, (addition des minutes et des heures en utilisant datepart
:())
> > > !!!!.
> > >
> > > Merci d'avance
> > > Loïc
> > >
> > >
> >
> >
>
>




Avatar
Patrice
1) Essaie le site de Fred largement cité dans ce groupe qui dispose d'un
chapitre sur dates et heures. Il me semblait avoir vu passer que l'on
pouvait CASTé un datetime en FLOAT pour faire des calculs.

2) A l'époque, j'avais suggéré plutôt de stocker explicitement la colonne
sous forme d'un entier (par exemple en minutes) ce qui me parait encore
maintenant plus "direct". Il est alors trivial de faire l'addition et la
mise en forme du résultat sous la forme HH:MM devient un formatage pris en
charge par l'application cliente.

Bonne continuation

Patrice


--

"Loïc" a écrit dans le message de
news:
Salut merci pour la solution mais celle-ci me renvoie un résultat erroné.


En
effet, le SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM
TotalHeure me renvoie un total de 05:45:00 alors que j'ai en tout cas pour


9
heure de total, et lorsque je décortique la requête de cette manière


SELECT
(SUM(CAST(TotalHeure AS FLOAT))) FROM TotalHeure cela me
renvoie -88.7604166666667 !!!!!!!!!

Quezako ?

Salutations
Loïc
"Patrice" a écrit dans le message de
news:
> Essaie :
>
> SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM TotalHeure
>
> Patrice
>
> --
>
> "Loïc" a écrit dans le message de
> news:
> > Salut, merci pour la réponse rapide.
> >
> > En fait, très con comme problème, je fais du développement depuis
quelques
> > temps, et j'ai toujours à l'esprit d'utiliser le code le plus optimisé
> > possible et surtout ne pas réinventer la roue et là je suis en train


de
me
> > prendre la tête pour quelque chose d'hyper simple....
> >
> > Voici de quoi il s'agit. Imaginons une table composée de colonnes :
> > HeureDeb, HeureFin, TotalHeure
> >
> > TotalHeure est une colonne alimentée comme il se doit par la differenc


e
> > entre HeureFin et HeureDeb (simplicité enfantine n'est ce pas ;)).
> > Maintenant que j'ai mon résultat dans cette colonne j'aimerais sommer
> > celle-ci, donc comme mon type de donnée est en datetime mes données


sont
> > stockée sous la forme : aaaa-mm-aa hh:mm:sss, alors le plus compliqué
que
> > j'ai trouvé est de faire la chose suivante :
> >
> > SELECT SUM(DATEPART(minute,TotalHeure))/60 FROM TotalHeure =>pour les
> > minutes
> > SELECT SUM(DATEPART(hour,TotalHeure)) FROM TotalHeure
> >
> > Il va s'en dire que cette solution ne me convient pas du tout, non
> seulement
> > parcque j'ai l'impression de bricoler :) et d'autre part car je pense
> qu'une
> > solution plus pro existe ;).
> >
> > Merci de ta patience et des informations que tu pourras m'apporter
> > Meilleures salutations
> > Loïc
> >
> >
> > "deconnected" a écrit dans le message de
> > news:%
> > > Je suppose que dateadd() ne te convient pas.
> > > Peux-tu donner plus d'explications sur ton probleme ?
> > >
> > >
> > > DATEADD ( datepart , number, date )
> > > exemple:
> > > select dateadd(hour,1,getdate())
> > >
> > >
> > > "Loïc" a écrit dans le message de
> > > news:eX$
> > > > Bonjour,
> > > >
> > > > Connaissez vous un site concernant SQL Server est de façon plus
> > spécifique
> > > > les manipulation de donnée de type DateTime.
> > > >
> > > > Je dois sommer des heures et ma solution semble être non optimisée
ni
> > > > pratique, (addition des minutes et des heures en utilisant


datepart
> :())
> > > > !!!!.
> > > >
> > > > Merci d'avance
> > > > Loïc
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Loïc
Salut merci pour toutes ses informations, en effet, je vais stocker tout
cela en minute.

Merci encore et bonne après midi
Loïc
"Patrice" a écrit dans le message de
news:
1) Essaie le site de Fred largement cité dans ce groupe qui dispose d'un
chapitre sur dates et heures. Il me semblait avoir vu passer que l'on
pouvait CASTé un datetime en FLOAT pour faire des calculs.

2) A l'époque, j'avais suggéré plutôt de stocker explicitement la colonne
sous forme d'un entier (par exemple en minutes) ce qui me parait encore
maintenant plus "direct". Il est alors trivial de faire l'addition et la
mise en forme du résultat sous la forme HH:MM devient un formatage pris en
charge par l'application cliente.

Bonne continuation

Patrice


--

"Loïc" a écrit dans le message de
news:
> Salut merci pour la solution mais celle-ci me renvoie un résultat


erroné.
En
> effet, le SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM
> TotalHeure me renvoie un total de 05:45:00 alors que j'ai en tout cas


pour
9
> heure de total, et lorsque je décortique la requête de cette manière
SELECT
> (SUM(CAST(TotalHeure AS FLOAT))) FROM TotalHeure cela me
> renvoie -88.7604166666667 !!!!!!!!!
>
> Quezako ?
>
> Salutations
> Loïc
> "Patrice" a écrit dans le message de
> news:
> > Essaie :
> >
> > SELECT CAST(SUM(CAST(TotalHeure AS FLOAT)) AS DATETIME) FROM


TotalHeure
> >
> > Patrice
> >
> > --
> >
> > "Loïc" a écrit dans le message de
> > news:
> > > Salut, merci pour la réponse rapide.
> > >
> > > En fait, très con comme problème, je fais du développement depuis
> quelques
> > > temps, et j'ai toujours à l'esprit d'utiliser le code le plus


optimisé
> > > possible et surtout ne pas réinventer la roue et là je suis en train
de
> me
> > > prendre la tête pour quelque chose d'hyper simple....
> > >
> > > Voici de quoi il s'agit. Imaginons une table composée de colonnes :
> > > HeureDeb, HeureFin, TotalHeure
> > >
> > > TotalHeure est une colonne alimentée comme il se doit par la


differenc
e
> > > entre HeureFin et HeureDeb (simplicité enfantine n'est ce pas ;)).
> > > Maintenant que j'ai mon résultat dans cette colonne j'aimerais


sommer
> > > celle-ci, donc comme mon type de donnée est en datetime mes données
sont
> > > stockée sous la forme : aaaa-mm-aa hh:mm:sss, alors le plus


compliqué
> que
> > > j'ai trouvé est de faire la chose suivante :
> > >
> > > SELECT SUM(DATEPART(minute,TotalHeure))/60 FROM TotalHeure =>pour


les
> > > minutes
> > > SELECT SUM(DATEPART(hour,TotalHeure)) FROM TotalHeure
> > >
> > > Il va s'en dire que cette solution ne me convient pas du tout, non
> > seulement
> > > parcque j'ai l'impression de bricoler :) et d'autre part car je


pense
> > qu'une
> > > solution plus pro existe ;).
> > >
> > > Merci de ta patience et des informations que tu pourras m'apporter
> > > Meilleures salutations
> > > Loïc
> > >
> > >
> > > "deconnected" a écrit dans le message de
> > > news:%
> > > > Je suppose que dateadd() ne te convient pas.
> > > > Peux-tu donner plus d'explications sur ton probleme ?
> > > >
> > > >
> > > > DATEADD ( datepart , number, date )
> > > > exemple:
> > > > select dateadd(hour,1,getdate())
> > > >
> > > >
> > > > "Loïc" a écrit dans le message de
> > > > news:eX$
> > > > > Bonjour,
> > > > >
> > > > > Connaissez vous un site concernant SQL Server est de façon plus
> > > spécifique
> > > > > les manipulation de donnée de type DateTime.
> > > > >
> > > > > Je dois sommer des heures et ma solution semble être non


optimisée
> ni
> > > > > pratique, (addition des minutes et des heures en utilisant
datepart
> > :())
> > > > > !!!!.
> > > > >
> > > > > Merci d'avance
> > > > > Loïc
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Frédéric BROUARD
un DATETIME est en faity stocké sous forme de FLOAT. La partie entière est le
jour compté à partir du 1er janvier 1900 = 0.
La partie décimale est une fraction de jour, soit 24h...

Donc 0,5 convertit en DATETIME donne 1er janvier 1900 à midi.

L'addition et la soustraction d'heures est donc directe. Point n'est besoin de
CAST CONVERT etc, il suffit d'additionner des réels.

Exemple :

SELECT CURRENT_TIMESTAMP + 0.5

Il convient donc de stocker ses heures sous forme de DATETIME ou de FLOAT, de
laisser les calculs se faire comme ci c'était des FLOAT et éventuellemment de
présenter les choses sous un aspect cosmétique plus clair par exemples avec des
fonctions comme :
http://sqlpro.developpez.com/MSSQLServer_fonctions/UDF.html#FN_CONVERT_HD_HMS
qui permet d'afficher une heure décimale en HMS.

A lire sur les problématiques de traitement des date/heures :
http://sqlpro.developpez.com/Planning/SQL_PLN.html

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************




Loïc a écrit:
Bonjour,

Connaissez vous un site concernant SQL Server est de façon plus spécifique
les manipulation de donnée de type DateTime.

Je dois sommer des heures et ma solution semble être non optimisée ni
pratique, (addition des minutes et des heures en utilisant datepart :())
!!!!.

Merci d'avance
Loïc




Avatar
Frédéric BROUARD
un DATETIME est en faity stocké sous forme de FLOAT. La partie entière est le
jour compté à partir du 1er janvier 1900 = 0.
La partie décimale est une fraction de jour, soit 24h...

Donc 0,5 convertit en DATETIME donne 1er janvier 1900 à midi.

L'addition et la soustraction d'heures est donc directe. Point n'est besoin de
CAST CONVERT etc, il suffit d'additionner des réels.

Exemple :

SELECT CURRENT_TIMESTAMP + 0.5

Il convient donc de stocker ses heures sous forme de DATETIME ou de FLOAT, de
laisser les calculs se faire comme ci c'était des FLOAT et éventuellemment de
présenter les choses sous un aspect cosmétique plus clair par exemples avec des
fonctions comme :
http://sqlpro.developpez.com/MSSQLServer_fonctions/UDF.html#FN_CONVERT_HD_HMS
qui permet d'afficher une heure décimale en HMS.

A lire sur les problématiques de traitement des date/heures :
http://sqlpro.developpez.com/Planning/SQL_PLN.html

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************




Loïc a écrit:
Bonjour,

Connaissez vous un site concernant SQL Server est de façon plus spécifique
les manipulation de donnée de type DateTime.

Je dois sommer des heures et ma solution semble être non optimisée ni
pratique, (addition des minutes et des heures en utilisant datepart :())
!!!!.

Merci d'avance
Loïc




Avatar
bruno reiter [MVP]
stocké plutôt sous forme de 2 INT ou SMALLINT
un pour les jours, un pour les "heures"

br

"Frédéric BROUARD" wrote in message
news:
un DATETIME est en faity stocké sous forme de FLOAT. La partie entière est


le
jour compté à partir du 1er janvier 1900 = 0.
La partie décimale est une fraction de jour, soit 24h...

Donc 0,5 convertit en DATETIME donne 1er janvier 1900 à midi.

L'addition et la soustraction d'heures est donc directe. Point n'est


besoin de
CAST CONVERT etc, il suffit d'additionner des réels.

Exemple :

SELECT CURRENT_TIMESTAMP + 0.5

Il convient donc de stocker ses heures sous forme de DATETIME ou de FLOAT,


de
laisser les calculs se faire comme ci c'était des FLOAT et éventuellemment


de
présenter les choses sous un aspect cosmétique plus clair par exemples


avec des
fonctions comme :



http://sqlpro.developpez.com/MSSQLServer_fonctions/UDF.html#FN_CONVERT_HD_HMS
qui permet d'afficher une heure décimale en HMS.

A lire sur les problématiques de traitement des date/heures :
http://sqlpro.developpez.com/Planning/SQL_PLN.html

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************




Loïc a écrit:
> Bonjour,
>
> Connaissez vous un site concernant SQL Server est de façon plus


spécifique
> les manipulation de donnée de type DateTime.
>
> Je dois sommer des heures et ma solution semble être non optimisée ni
> pratique, (addition des minutes et des heures en utilisant datepart :())
> !!!!.
>
> Merci d'avance
> Loïc
>
>