Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

soustraction de dates

10 réponses
Avatar
Fred
Bonjour,
Le query problématique se présente comme ceci :

select
convert(varchar(20),service_req.insert_time,100) as 'SR Insert Time',
convert(varchar(20),service_req.close_time,100) as 'SR Close Time',
convert(varchar(8),service_req.close_time - service_req.insert_time, 108) as
'Time Spent on the SR'
from ...

Les données obtenues ont la forme suivante :

Mar 2 2009 11:24AM Mar 2 2009 11:27AM 00:02:40
Mar 2 2009 12:32PM Mar 13 2009 8:24AM 19:52:00
Mar 2 2009 4:38PM Mar 2 2009 4:39PM 00:00:56
Mar 2 2009 5:55PM Mar 3 2009 11:01AM 17:05:26


Si je modifie le query (service_req.close_time - service_req.insert_time)
alors la troisième colonne ressemble à ça :

1900-01-01 00:02:40.617
1900-01-11 19:52:00.810
1900-01-01 00:00:56.607
1900-01-01 17:05:26.140

On voit bien à la troisième ligne d'où vient l'erreur (1900-01-11 ) ...

Quelqu'un pourrait-il m'aider à trouver un moyen de soustraire 2 dates sans
avoir d'erreur ?

D'avance merci !

10 réponses

Avatar
Patrice
Bonjour,

Si je comprends bien on essaie de formater la différence entre deux dates
sous forme de date ?

Soustraire deux dates donne une durée et non pas une date...

--
Patrice


"Fred" a écrit dans le message de groupe de
discussion :
Bonjour,
Le query problématique se présente comme ceci :

select
convert(varchar(20),service_req.insert_time,100) as 'SR Insert Time',
convert(varchar(20),service_req.close_time,100) as 'SR Close Time',
convert(varchar(8),service_req.close_time - service_req.insert_time, 108)
as
'Time Spent on the SR'
from ...

Les données obtenues ont la forme suivante :

Mar 2 2009 11:24AM Mar 2 2009 11:27AM 00:02:40
Mar 2 2009 12:32PM Mar 13 2009 8:24AM 19:52:00
Mar 2 2009 4:38PM Mar 2 2009 4:39PM 00:00:56
Mar 2 2009 5:55PM Mar 3 2009 11:01AM 17:05:26


Si je modifie le query (service_req.close_time - service_req.insert_time)
alors la troisième colonne ressemble à ça :

1900-01-01 00:02:40.617
1900-01-11 19:52:00.810
1900-01-01 00:00:56.607
1900-01-01 17:05:26.140

On voit bien à la troisième ligne d'où vient l'erreur (1900-01-11 ) ...

Quelqu'un pourrait-il m'aider à trouver un moyen de soustraire 2 dates
sans
avoir d'erreur ?

D'avance merci !




Avatar
bruno reiter
ceci peut t'aider ?

declare @deb datetime
declare @fin datetime
set @deb = '20090101 10:00:00'
set @fin = '20090503 12:00:00'
select @fin - @deb, convert(varchar(8), @fin - @deb, 108) as nbHMS ,
datediff(dd, '19000101', @fin - @deb) as nbjour
set @deb = '20090101 10:00:00'
set @fin = '20090503 02:00:00'
select @fin - @deb, convert(varchar(8), @fin - @deb, 108) as nbHMS ,
datediff(dd, '19000101', @fin - @deb) as nbjour

BR

"Fred" wrote in message
news:
Bonjour,
Le query problématique se présente comme ceci :

select
convert(varchar(20),service_req.insert_time,100) as 'SR Insert Time',
convert(varchar(20),service_req.close_time,100) as 'SR Close Time',
convert(varchar(8),service_req.close_time - service_req.insert_time, 108)
as
'Time Spent on the SR'
from ...

Les données obtenues ont la forme suivante :

Mar 2 2009 11:24AM Mar 2 2009 11:27AM 00:02:40
Mar 2 2009 12:32PM Mar 13 2009 8:24AM 19:52:00
Mar 2 2009 4:38PM Mar 2 2009 4:39PM 00:00:56
Mar 2 2009 5:55PM Mar 3 2009 11:01AM 17:05:26


Si je modifie le query (service_req.close_time - service_req.insert_time)
alors la troisième colonne ressemble à ça :

1900-01-01 00:02:40.617
1900-01-11 19:52:00.810
1900-01-01 00:00:56.607
1900-01-01 17:05:26.140

On voit bien à la troisième ligne d'où vient l'erreur (1900-01-11 ) ...

Quelqu'un pourrait-il m'aider à trouver un moyen de soustraire 2 dates
sans
avoir d'erreur ?

D'avance merci !




Avatar
Fred
Bonjour,
Et bien oui et non ... je vois le principe mais je ne sais pas comment
adapter ça ... je n'ai encore jamais utilisé de varibles.
Je vais donc vous expliquer ce dont j'ai exactement besoin.
Dans plusieurs tables, je trouve les données suivantes :
- un numéro de service request
- une date de début de ce service request
- une date de fin

Je voudrais donc faire une requête qui me donne, le n° du SR, la date de
début, la date de fin et le temps qui s'est écoulé entre l'ouverture et la
fermeture du SR.

Si j'utilise l'info que tu m'as donnée, il me met le m^me nombre de jours
pour tous les SR.
Peux-tu m'en dire un peu plus ?
Merci beaucoup d'avance,


"bruno reiter" a écrit :

ceci peut t'aider ?

declare @deb datetime
declare @fin datetime
set @deb = '20090101 10:00:00'
set @fin = '20090503 12:00:00'
select @fin - @deb, convert(varchar(8), @fin - @deb, 108) as nbHMS ,
datediff(dd, '19000101', @fin - @deb) as nbjour
set @deb = '20090101 10:00:00'
set @fin = '20090503 02:00:00'
select @fin - @deb, convert(varchar(8), @fin - @deb, 108) as nbHMS ,
datediff(dd, '19000101', @fin - @deb) as nbjour

BR

"Fred" wrote in message
news:
> Bonjour,
> Le query problématique se présente comme ceci :
>
> select
> convert(varchar(20),service_req.insert_time,100) as 'SR Insert Time',
> convert(varchar(20),service_req.close_time,100) as 'SR Close Time',
> convert(varchar(8),service_req.close_time - service_req.insert_time, 108)
> as
> 'Time Spent on the SR'
> from ...
>
> Les données obtenues ont la forme suivante :
>
> Mar 2 2009 11:24AM Mar 2 2009 11:27AM 00:02:40
> Mar 2 2009 12:32PM Mar 13 2009 8:24AM 19:52:00
> Mar 2 2009 4:38PM Mar 2 2009 4:39PM 00:00:56
> Mar 2 2009 5:55PM Mar 3 2009 11:01AM 17:05:26
>
>
> Si je modifie le query (service_req.close_time - service_req.insert_time)
> alors la troisième colonne ressemble à ça :
>
> 1900-01-01 00:02:40.617
> 1900-01-11 19:52:00.810
> 1900-01-01 00:00:56.607
> 1900-01-01 17:05:26.140
>
> On voit bien à la troisième ligne d'où vient l'erreur (1900-01-11 ) ...
>
> Quelqu'un pourrait-il m'aider à trouver un moyen de soustraire 2 dates
> sans
> avoir d'erreur ?
>
> D'avance merci !
>
>




Avatar
Fred
Bonjour,
Le premier post était vide quand je l'avais ouvert la première fois alors
que celui de bruno pas ... maintenant je le vois.


Le résultat correspond bien à ce que je recherche mais c'est sûr qu'un
nombre en minutes, c'est bof ... il faut oublier la mise en forme côté client
par contre, comment obtenir la 2ème alternative ? Au sein de la requête même
c'est possible ?
Merci en tout cas,

"Patrice" a écrit :

De mon cte je ferais qq chose comme :

select
service_req.insert_time as 'SR Insert Time',
service_req.close_time as 'SR Close Time',
datediff(minute, service_req.insert_time,service_req.close_time) as 'Time
Spent on the SR'
from ...

ce qui donnera donc les dates plus la dure (un nombre en minutes).

Je ne sais pas quel est le contexte mais je ferais la mise en forme ct
client (cela permet par exemple de trier si besoin dans une grille en se
basant bien sur des dates et non pas sur des dates qui ont dj t
converties en texte et dont le tri serait donc fauss donc j'ai supprim les
"convert").

Pour la dure, cela peut tre mis en forme avec un timespan (client .NET) ou
en prenant la division entire et le reste de la division par 60 pour
l'avoir en heures et minutes...

Comme je disais dans mon premier post, la diffrence entre deux dates est un
nombre (dure) et non pas une date.





Avatar
Patrice
Donc / et % pour le modulo ce qui permettra de l'avoir en heures et
minutes...

--
Patrice

"Fred" a écrit dans le message de groupe de
discussion :
Bonjour,
Le premier post était vide quand je l'avais ouvert la première fois alors
que celui de bruno pas ... maintenant je le vois.


Le résultat correspond bien à ce que je recherche mais c'est sûr qu'un
nombre en minutes, c'est bof ... il faut oublier la mise en forme côté
client
par contre, comment obtenir la 2ème alternative ? Au sein de la requête
même
c'est possible ?
Merci en tout cas,

"Patrice" a écrit :

De mon cte je ferais qq chose comme :

select
service_req.insert_time as 'SR Insert Time',
service_req.close_time as 'SR Close Time',
datediff(minute, service_req.insert_time,service_req.close_time) as 'Time
Spent on the SR'
from ...

ce qui donnera donc les dates plus la dure (un nombre en minutes).

Je ne sais pas quel est le contexte mais je ferais la mise en forme ct
client (cela permet par exemple de trier si besoin dans une grille en se
basant bien sur des dates et non pas sur des dates qui ont dj t
converties en texte et dont le tri serait donc fauss donc j'ai supprim
les
"convert").

Pour la dure, cela peut tre mis en forme avec un timespan (client .NET)
ou
en prenant la division entire et le reste de la division par 60 pour
l'avoir en heures et minutes...

Comme je disais dans mon premier post, la diffrence entre deux dates est
un
nombre (dure) et non pas une date.







Avatar
Fred
Bonjour,
Je ne comprends pas bien ce que tu veux dire ... c'est quoi le modulo :-) ?
Thks,


"Patrice" a écrit :

Donc / et % pour le modulo ce qui permettra de l'avoir en heures et
minutes...

--
Patrice

"Fred" a écrit dans le message de groupe de
discussion :
> Bonjour,
> Le premier post était vide quand je l'avais ouvert la première fois alors
> que celui de bruno pas ... maintenant je le vois.
>
>
> Le résultat correspond bien à ce que je recherche mais c'est sûr qu'un
> nombre en minutes, c'est bof ... il faut oublier la mise en forme côté
> client
> par contre, comment obtenir la 2ème alternative ? Au sein de la requête
> même
> c'est possible ?
> Merci en tout cas,
>
> "Patrice" a écrit :
>
>> De mon cte je ferais qq chose comme :
>>
>> select
>> service_req.insert_time as 'SR Insert Time',
>> service_req.close_time as 'SR Close Time',
>> datediff(minute, service_req.insert_time,service_req.close_time) as 'Time
>> Spent on the SR'
>> from ...
>>
>> ce qui donnera donc les dates plus la dure (un nombre en minutes).
>>
>> Je ne sais pas quel est le contexte mais je ferais la mise en forme ct
>> client (cela permet par exemple de trier si besoin dans une grille en se
>> basant bien sur des dates et non pas sur des dates qui ont dj t
>> converties en texte et dont le tri serait donc fauss donc j'ai supprim
>> les
>> "convert").
>>
>> Pour la dure, cela peut tre mis en forme avec un timespan (client .NET)
>> ou
>> en prenant la division entire et le reste de la division par 60 pour
>> l'avoir en heures et minutes...
>>
>> Comme je disais dans mon premier post, la diffrence entre deux dates est
>> un
>> nombre (dure) et non pas une date.
>>
>>
>>




Avatar
Patrice
Je veux dire le reste de la division.

Donc le calcul te donne par exemple 100 (minutes).

La division entière donne :
SELECT 100/60
ce qui donne 1

Le reste donne :
SELECT 100%60
ce qui donne 40

100 minutes correspondent donc à 1 h 40 mn...

--
Patrice

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de groupe de
discussion :
Donc / et % pour le modulo ce qui permettra de l'avoir en heures et
minutes...

--
Patrice

"Fred" a écrit dans le message de groupe
de discussion :
Bonjour,
Le premier post était vide quand je l'avais ouvert la première fois alors
que celui de bruno pas ... maintenant je le vois.


Le résultat correspond bien à ce que je recherche mais c'est sûr qu'un
nombre en minutes, c'est bof ... il faut oublier la mise en forme côté
client
par contre, comment obtenir la 2ème alternative ? Au sein de la requête
même
c'est possible ?
Merci en tout cas,

"Patrice" a écrit :

De mon cte je ferais qq chose comme :

select
service_req.insert_time as 'SR Insert Time',
service_req.close_time as 'SR Close Time',
datediff(minute, service_req.insert_time,service_req.close_time) as
'Time
Spent on the SR'
from ...

ce qui donnera donc les dates plus la dure (un nombre en minutes).

Je ne sais pas quel est le contexte mais je ferais la mise en forme ct
client (cela permet par exemple de trier si besoin dans une grille en se
basant bien sur des dates et non pas sur des dates qui ont dj t
converties en texte et dont le tri serait donc fauss donc j'ai supprim
les
"convert").

Pour la dure, cela peut tre mis en forme avec un timespan (client .NET)
ou
en prenant la division entire et le reste de la division par 60 pour
l'avoir en heures et minutes...

Comme je disais dans mon premier post, la diffrence entre deux dates est
un
nombre (dure) et non pas une date.










Avatar
Fred
Re,
Pas de souci quant au principe mais comment le traduire au niveau du select
(dans datediff(minute, service_req.insert_time,service_req.close_time) as
'Time
Spent on the SR') ?
Merci d'avance,



"Patrice" a écrit :

Je veux dire le reste de la division.

Donc le calcul te donne par exemple 100 (minutes).

La division entire donne :
SELECT 100/60
ce qui donne 1

Le reste donne :
SELECT 100%60
ce qui donne 40

100 minutes correspondent donc 1 h 40 mn...

--
Patrice

"Patrice" <http://www.chez.com/scribe/> a crit dans le message de groupe de
discussion :
> Donc / et % pour le modulo ce qui permettra de l'avoir en heures et
> minutes...
>
> --
> Patrice
>
> "Fred" a crit dans le message de groupe
> de discussion :
>> Bonjour,
>> Le premier post tait vide quand je l'avais ouvert la premire fois alors
>> que celui de bruno pas ... maintenant je le vois.
>>
>>
>> Le rsultat correspond bien ce que je recherche mais c'est sr qu'un
>> nombre en minutes, c'est bof ... il faut oublier la mise en forme ct
>> client
>> par contre, comment obtenir la 2me alternative ? Au sein de la requte
>> mme
>> c'est possible ?
>> Merci en tout cas,
>>
>> "Patrice" a crit :
>>
>>> De mon cte je ferais qq chose comme :
>>>
>>> select
>>> service_req.insert_time as 'SR Insert Time',
>>> service_req.close_time as 'SR Close Time',
>>> datediff(minute, service_req.insert_time,service_req.close_time) as
>>> 'Time
>>> Spent on the SR'
>>> from ...
>>>
>>> ce qui donnera donc les dates plus la dure (un nombre en minutes).
>>>
>>> Je ne sais pas quel est le contexte mais je ferais la mise en forme ct
>>> client (cela permet par exemple de trier si besoin dans une grille en se
>>> basant bien sur des dates et non pas sur des dates qui ont dj t
>>> converties en texte et dont le tri serait donc fauss donc j'ai supprim
>>> les
>>> "convert").
>>>
>>> Pour la dure, cela peut tre mis en forme avec un timespan (client .NET)
>>> ou
>>> en prenant la division entire et le reste de la division par 60 pour
>>> l'avoir en heures et minutes...
>>>
>>> Comme je disais dans mon premier post, la diffrence entre deux dates est
>>> un
>>> nombre (dure) et non pas une date.
>>>
>>>
>>>
>



Avatar
Patrice
Bonjour,

Cela pourrait donner qq chose comme :

create table t(insert_time smalldatetime,close_time smalldatetime)
go
insert into t values ('20090429 10:00','20090429 14:30')
insert into t values ('20090429 10:00','20090430 14:30')
go
select insert_time,close_time,
datediff(minute,insert_time,close_time)/60 AS DurationH,
datediff(minute,insert_time,close_time)%60 AS DurationM
FROM t

Ma préférence personnelle serait sans doute de récupérer les minutes et de
gérer la mise en forme côté client .

--
Patrice


"Fred" a écrit dans le message de groupe de
discussion :
Re,
Pas de souci quant au principe mais comment le traduire au niveau du
select
(dans datediff(minute, service_req.insert_time,service_req.close_time) as
'Time
Spent on the SR') ?
Merci d'avance,



"Patrice" a écrit :

Je veux dire le reste de la division.

Donc le calcul te donne par exemple 100 (minutes).

La division entire donne :
SELECT 100/60
ce qui donne 1

Le reste donne :
SELECT 100%60
ce qui donne 40

100 minutes correspondent donc 1 h 40 mn...

--
Patrice

"Patrice" <http://www.chez.com/scribe/> a crit dans le message de groupe
de
discussion :
> Donc / et % pour le modulo ce qui permettra de l'avoir en heures et
> minutes...
>
> --
> Patrice
>
> "Fred" a crit dans le message de
> groupe
> de discussion :
>> Bonjour,
>> Le premier post tait vide quand je l'avais ouvert la premire fois
>> alors
>> que celui de bruno pas ... maintenant je le vois.
>>
>>
>> Le rsultat correspond bien ce que je recherche mais c'est sr qu'un
>> nombre en minutes, c'est bof ... il faut oublier la mise en forme ct
>> client
>> par contre, comment obtenir la 2me alternative ? Au sein de la requte
>> mme
>> c'est possible ?
>> Merci en tout cas,
>>
>> "Patrice" a crit :
>>
>>> De mon cte je ferais qq chose comme :
>>>
>>> select
>>> service_req.insert_time as 'SR Insert Time',
>>> service_req.close_time as 'SR Close Time',
>>> datediff(minute, service_req.insert_time,service_req.close_time) as
>>> 'Time
>>> Spent on the SR'
>>> from ...
>>>
>>> ce qui donnera donc les dates plus la dure (un nombre en minutes).
>>>
>>> Je ne sais pas quel est le contexte mais je ferais la mise en forme
>>> ct
>>> client (cela permet par exemple de trier si besoin dans une grille en
>>> se
>>> basant bien sur des dates et non pas sur des dates qui ont dj t
>>> converties en texte et dont le tri serait donc fauss donc j'ai
>>> supprim
>>> les
>>> "convert").
>>>
>>> Pour la dure, cela peut tre mis en forme avec un timespan (client
>>> .NET)
>>> ou
>>> en prenant la division entire et le reste de la division par 60 pour
>>> l'avoir en heures et minutes...
>>>
>>> Comme je disais dans mon premier post, la diffrence entre deux dates
>>> est
>>> un
>>> nombre (dure) et non pas une date.
>>>
>>>
>>>
>





Avatar
Fred
super, merci beaucoup.

"Patrice" a écrit :

Bonjour,

Cela pourrait donner qq chose comme :

create table t(insert_time smalldatetime,close_time smalldatetime)
go
insert into t values ('20090429 10:00','20090429 14:30')
insert into t values ('20090429 10:00','20090430 14:30')
go
select insert_time,close_time,
datediff(minute,insert_time,close_time)/60 AS DurationH,
datediff(minute,insert_time,close_time)%60 AS DurationM
FROM t

Ma prfrence personnelle serait sans doute de rcuprer les minutes et de
grer la mise en forme ct client .

--
Patrice


"Fred" a crit dans le message de groupe de
discussion :
> Re,
> Pas de souci quant au principe mais comment le traduire au niveau du
> select
> (dans datediff(minute, service_req.insert_time,service_req.close_time) as
> 'Time
> Spent on the SR') ?
> Merci d'avance,
>
>
>
> "Patrice" a crit :
>
>> Je veux dire le reste de la division.
>>
>> Donc le calcul te donne par exemple 100 (minutes).
>>
>> La division entire donne :
>> SELECT 100/60
>> ce qui donne 1
>>
>> Le reste donne :
>> SELECT 100%60
>> ce qui donne 40
>>
>> 100 minutes correspondent donc 1 h 40 mn...
>>
>> --
>> Patrice
>>
>> "Patrice" <http://www.chez.com/scribe/> a crit dans le message de groupe
>> de
>> discussion :
>> > Donc / et % pour le modulo ce qui permettra de l'avoir en heures et
>> > minutes...
>> >
>> > --
>> > Patrice
>> >
>> > "Fred" a crit dans le message de
>> > groupe
>> > de discussion :
>> >> Bonjour,
>> >> Le premier post tait vide quand je l'avais ouvert la premire fois
>> >> alors
>> >> que celui de bruno pas ... maintenant je le vois.
>> >>
>> >>
>> >> Le rsultat correspond bien ce que je recherche mais c'est sr qu'un
>> >> nombre en minutes, c'est bof ... il faut oublier la mise en forme ct
>> >> client
>> >> par contre, comment obtenir la 2me alternative ? Au sein de la requte
>> >> mme
>> >> c'est possible ?
>> >> Merci en tout cas,
>> >>
>> >> "Patrice" a crit :
>> >>
>> >>> De mon cte je ferais qq chose comme :
>> >>>
>> >>> select
>> >>> service_req.insert_time as 'SR Insert Time',
>> >>> service_req.close_time as 'SR Close Time',
>> >>> datediff(minute, service_req.insert_time,service_req.close_time) as
>> >>> 'Time
>> >>> Spent on the SR'
>> >>> from ...
>> >>>
>> >>> ce qui donnera donc les dates plus la dure (un nombre en minutes).
>> >>>
>> >>> Je ne sais pas quel est le contexte mais je ferais la mise en forme
>> >>> ct
>> >>> client (cela permet par exemple de trier si besoin dans une grille en
>> >>> se
>> >>> basant bien sur des dates et non pas sur des dates qui ont dj t
>> >>> converties en texte et dont le tri serait donc fauss donc j'ai
>> >>> supprim
>> >>> les
>> >>> "convert").
>> >>>
>> >>> Pour la dure, cela peut tre mis en forme avec un timespan (client
>> >>> .NET)
>> >>> ou
>> >>> en prenant la division entire et le reste de la division par 60 pour
>> >>> l'avoir en heures et minutes...
>> >>>
>> >>> Comme je disais dans mon premier post, la diffrence entre deux dates
>> >>> est
>> >>> un
>> >>> nombre (dure) et non pas une date.
>> >>>
>> >>>
>> >>>
>> >
>>