Avatar billede FrankJensen1 Nybegynder
13. maj 2011 - 00:50 Der er 6 kommentarer og
1 løsning

Beregn arbejdstimer mellem to datoer

Jeg har en tabel med 2 dato-felter (format datetime) der angiver starttidspunkt og sluttidspunkt.
F.eks. 2011-05-10 09:00:00:000 til 2011-05-12 10:00:00:000.

Jeg kunne godt tænke mig at vide hvor mange arbejdstimer der er mellem disse to datetimes. Arbejdstid = mandag-fredag 08:00 til 16:00. Der skal ikke tages højde for helligdage.

Ovenstående eksempel vil resultatet være 9 timer (resultatet må gerne være i minutter).
Hvis starttidspunkt er fredag kl 15 og slut er tirsdag kl 10 vil resultatet være (fredag 1 time, lørdag+søndag 0 timer, mandag 8 timer og tirsdag 2 timer) = 11 timer.

Har fundet http://stackoverflow.com/questions/5274208/calculate-business-hours-between-two-dates men det benytter DATE og TIME som formater, og det virker åbenbart kun på MS.SQL 2008...

Nogen der kan hjælpe mig på vej? (Alternative løsninger modtages også, bare jeg kan bevare mit input og få nogle minutter retur ;)
Avatar billede FrankJensen1 Nybegynder
13. maj 2011 - 01:14 #1
Kan se at jeg lige glemte at skrive, at det er SQL Server 2005 jeg arbejder på, og vil helst have det som en funktion...  Hjælpetabeller kan jeg godt oprette hvis det gør funktionen mere simpel.

Og mit glimerende første eksempel...  med fejl ;) Fra den 10 til 12 maj er der selvfølgelig 2 arbejdsdage, så resultat er 17 timer (og 9 hvis det nu var fra den 10 til den 11), beklager fejlen.
Avatar billede arne_v Ekspert
13. maj 2011 - 01:25 #2
Lav en CLR UDF.

Det er ret nemt at kode i C# eller VB.NET.

Det bliver noget rod i T-SQL.

Hvis en CLR UDF er en mulighed kan jeg godt levere en stump kode.
Avatar billede FrankJensen1 Nybegynder
13. maj 2011 - 02:07 #3
Det tror jeg vil blive noget rod, er mest til at det ligger i SQL, da udtrækket skal leveres til flere forskellige rapporter.
Alternativt er de fleste rapporter i Excel...  Men det burde kunne lade sig gøre i SQL (når det kan i MS.SQL 2008 burde det også kunne i 2005'eren ;)
Avatar billede arne_v Ekspert
13. maj 2011 - 02:19 #4
Rapporterne udfoerer vel en SQL:

SELECT ...,NOWORKHOURS(tid1,tid2) ...

og er ret ligeglad med om NOWORKHOURS er skrevet i C# eller T-SQL.

Problemet med CLR UDF er at det skal enables og det er ikke altid en mulighed.
Avatar billede FrankJensen1 Nybegynder
13. maj 2011 - 12:26 #5
Kender ikke til CLR UDF, men er det det samme som alm. funktioner eller skal der noget specielt til?
Er den lykkelige ejer af admin-password til serveren... (og der er allerede andre functions på den database).

Er slet ikke afvisende så længe at det er noget der kan kører rent på SQL-serveren...
Avatar billede FrankJensen1 Nybegynder
16. maj 2011 - 01:53 #6
Fandt løsningen på http://www.codeproject.com/Tips/173154/Calculate-Business-Hours.aspx#alternate1, kodet som CLR UDF (og det var jo ret nemt).

Tak for hjælpen alligevel :)
Avatar billede FrankJensen1 Nybegynder
16. maj 2011 - 01:56 #7
Men Arne, hvis du kigger på koden og kan komme med et hurtigt på hvordan at jeg kan tjekke for helligdage også ville det være point og en stor hjælp...

Det må være nede i GetBusinessDays at man kan undersøge om datoen er en helligdag, og kan godt hardcode helligdage det vil være OK, men hvordan skal det tjek så være? (har ikke den store erfaring i C# så jeg famler noget rundt ;) ).

Men nu er der i det mindste hul igennem, hvilket var første succes kriterie :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB