[SQL] DiffDate met decimalen

Pagina: 1
Acties:

  • Ronald_stage
  • Registratie: Januari 2002
  • Laatst online: 26-05 21:20

Ronald_stage

wat kan je hier nog zeggen

Topicstarter
Ik probeer op een MS SQL server een SP te maken die voor me berekend
wat het vershil tussen 2 data is.

De DiffDate op basis van maanden geeft bij date1 (15 jan) en date2 (26 feb) een
verschil van 1 maand... wat ik wil hebben is 1.8 maand verschil.

bestaat hier iets voor of moet ik iets gaan knutselen dat ik het op basis van dagen doe.. en dan het totaal aantal dagen van de maanden tel, en het dan ga bereken?

op deze manier:

totaal_aantal_maanden /
aantal_dagen_in_deze_maanden *
aantal_dagen_tussen_de_2_data

Verwijderd

http://msdn.microsoft.com...da-db_5vxi.asp?frame=true
Dus het verschil in dagen zou zo moeten zijn:
SQL:
1
DATEDIFF ( dd , startdate , enddate )

  • Ronald_stage
  • Registratie: Januari 2002
  • Laatst online: 26-05 21:20

Ronald_stage

wat kan je hier nog zeggen

Topicstarter
Ik weet dat ik het ook op dagen kan doen, maar ik wil het in maanden weten.

DATEDIFF ( mm , startdate , enddate )

doet het in maanden maar geeft een 1 terug en ik wil een 1.X of een 0.X terug krijgen.

maar als dat niet bestaat dan moet ik er zelf iets voor maken dat het gaat omrekenen.

Verwijderd

Wat is er mis met:
code:
1
SELECT  (DATEDIFF ( dd, startdate, enddat ))/30 AS AantalMaanden
Of denk ik nu te simpel?

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Ik vraag me af waarom je met deze notatie wilt werken. 1.8 maand zegt namelijk eigenlijk niets, aangezien een maand geen constant aantal dagen heeft.
Is het niet handiger met weken te gaan werken :?

[ Voor 1% gewijzigd door DeverauX op 27-01-2004 21:16 . Reden: typo ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • Ronald_stage
  • Registratie: Januari 2002
  • Laatst online: 26-05 21:20

Ronald_stage

wat kan je hier nog zeggen

Topicstarter
Er is een maand bedrag wat de klant in rekening moet worden gebracht.
wat deze functie moet uitrekenen is de "monthratio" voor de kosten...

hierna volgt dus prijs_per_maand * Monthratio


vandaar dat ik dit er uit wil krijgen.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ronald_stage schreef op 27 januari 2004 @ 15:53:
Er is een maand bedrag wat de klant in rekening moet worden gebracht.
wat deze functie moet uitrekenen is de "monthratio" voor de kosten...

hierna volgt dus prijs_per_maand * Monthratio


vandaar dat ik dit er uit wil krijgen.
Dan zou toffenboy's voorbeeld prima moeten werken. Maar ik zou toch over gaan op weken ofzo. Overigens kun je met CAST eens proberen of je 't naar een double kunt casten ofzo, maar ik vrees dat je gewoon een int terug krijgt... Ja dus B)

[ Voor 4% gewijzigd door RobIII op 27-01-2004 15:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Ronald_stage
  • Registratie: Januari 2002
  • Laatst online: 26-05 21:20

Ronald_stage

wat kan je hier nog zeggen

Topicstarter
Ik heb nu drie kolomen met int... (myday mymonth myyear) hier wil
ik nu een mydate van maken in date format weet iemand hoe ik dit doe?

Verwijderd

Volgens mij geeft onderstaande code wat je wil. Overigens, als ik je formule invul (onderaan in de code) komt er niet 1.8, maar 1.4nogwat uit.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
declare 
  @l_datum_start datetime
 ,@l_datum_eind  datetime

set @l_datum_start = '2004-01-15'
set @l_datum_eind  = '2004-02-26'

select  
  1.0 * ( datediff( mm, @l_datum_start, @l_datum_eind ) + 1 )
      / ( datediff( dd, convert( datetime
                                ,  left( convert( varchar
                                                 ,@l_datum_start
                                                 ,120 )
                                        ,7 )
                                 + '-01' )
                       ,convert( datetime
                                ,  left( convert( varchar
                                                 ,dateadd( mm
                                                          ,1
                                                          ,@l_datum_eind )
                                                 ,120 )
                                        ,7 )
                                 + '-01' ) 
                      ) - 1.0 )
            * datediff( dd, @l_datum_start, @l_datum_eind )


select 2.0/( 31.0 + 28 ) * 42

[ Voor 32% gewijzigd door Verwijderd op 27-01-2004 17:07 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ronald_stage schreef op 27 januari 2004 @ 16:30:
Ik heb nu drie kolomen met int... (myday mymonth myyear) hier wil
ik nu een mydate van maken in date format weet iemand hoe ik dit doe?
Waarom heb je niet in 1ste instantie meteen een date-field gebruikt? Kun je dat niet beter aanpassen?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1