Avatar billede stig3 Mester
06. november 2007 - 17:04 Der er 6 kommentarer og
1 løsning

Antal dage i sidste måned

Hej

Jeg skal lave en query der finder antallet af dage i sidste måned.

På nette fandt jeg denne:
Select Day(DateAdd(Month, 1, '2007-11-01') - Day(DateAdd(Month, 1, '2007-12-01')))

Den virker også fint nok, men den skulle gerne være lidt mere dynamisk, så man på det tidspunkt man eksekverer får antallet af dage for måneden før.

Det skal bruges direkte i en sql statement, så helst ikke som en funktion.
Avatar billede arne_v Ekspert
07. november 2007 - 01:45 #1
select day(dateadd(d,-1,cast(ltrim(str(year(getdate())))+'-'+ltrim(str(month(getdate())))+'-1' as datetime)))
Avatar billede lorentsnv Nybegynder
07. november 2007 - 08:42 #2
En hurtigere og enkelre funktion:
select DAY(dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0)))

Oventsåtende finder første dag i aktuel måned måneden ('SELECT DATEADD(mm, DATEDIFF(mm,0,GETDATE()),0)'), trækker 3 millisekund fra, for at find sidste dag i forrige måned, og bruger derefter Day til at få en integer værdi af den aktuelle dag.

Konvertereing frem og tilbage til string er forholdsvist tungt, men hvis det kun gøres på nogle få records, har det ikke den store betydning. Skal du derimod lave beregning på mange records, vil jeg anbefale at bruge date beregning som ovenfor.
Avatar billede stig3 Mester
07. november 2007 - 09:55 #3
Det skal kun køre en gang om måneden og det er under 1000 records, så performance er ikke det store problem.

Vil begge virke henover nytår - altså den 1. januar.
..og kan man nemt ændre noget så den tager antal dage i den måned man er i ?
Avatar billede lorentsnv Nybegynder
07. november 2007 - 13:32 #4
Antal dage i indeværende måned:
select DAY(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()  )+1, 0)))

Ovenstående virker fint alle dage i året,
Avatar billede stig3 Mester
07. november 2007 - 13:57 #5
Perfekt, det var lige hvad der skulle til.
Jeg sætter point lidt op og fordeler.
Avatar billede stig3 Mester
07. november 2007 - 13:58 #6
Hov, i har ikke svaret. Kom lige med et svar...
Avatar billede lorentsnv Nybegynder
07. november 2007 - 14:29 #7
:)
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