Bonjour,
En C#, si je veux connaître la différence entre deux dates sous la forme d'un intervalle de temps, je fais comme ça :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DateTime from = ...; DateTime to = ...; TimeSpan diff = to - from;
J'ai maintenant une table :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 create table worktime ( id int primary key identity, ticket_id int null references plannis.ticket(id), [description] varchar(max) not null, [start] datetime2 not null, [end] datetime2 not null ); go
Pour des facilités d'interrogation, je souhaite rajouter une colonne "duration" de type time qui contient la différence entre les deux date.
Naïvement, j'ai tenté :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 alter table worktime add duration as ([end] - [start]) persisted; go
Sauf que j'obtiens le résultat suivant :
Ok, moi je veux bien... SQL c'est pas aussi malin que C# au niveau de convertions de type, pourquoi pas.Msg*8117, Niveau*16, État*1, Ligne*2
Le type de données de l'opérande datetime2 n'est pas valide pour l'opérateur subtract.
Seulement, la seule fonction qui semble permettre de calculer la différence entre deux dates, c'est DATEDIFF().
Au simple détail près que DATEDIFF() ne retourne pas un TIME, mais un INT correspondant à la granularité étudiée.
J'ai rien contre le fait de reconstruire un TIME à partir d'un nombre de secondes ou minutes, sauf que si pour une raison ou une autre, j'ai d'un côté une date en 2019, et de l'autre, car elle n'est pas renseignée, une date en l'an 1, je fais avoir une erreur de dépassement de capacité car le nombre de seconde, minutes et même heures depuis la naissance de notre pote Jésus dépasse allègrement la capacité d'un simple INT...
Comment faire proprement un TIME à partir de la différence entre deux dates ?
Partager