dagen toedelen naar jaren

Status
Niet open voor verdere reacties.

ronald74

Gebruiker
Lid geworden
15 mei 2006
Berichten
48
Hallo,

In een tabel heb ik records zitten met o.a. het veld "geldigvan" en "geldigtot".
Wat ik graag wil, is een nieuwe tabel aanmaken met extra kolommen, waar per jaar het aantal dagen staat.

(simpel) voorbeeld van een record:
geldigvan: 30-12-2007
geldigtot: 05-01-2008

In de nieuwe tabel wil ik dan een kolom "2007" hebben met de waarde 2
en een kolom "2008" met de waarde 4.

De periode kan ook over meer dan 2 jaar lopen. Het aantal kolommen (jaren) kan evt. vooraf al vastgesteld worden (het betreft 2001 t/m 2008).

Weet iemand hier een handige SQL voor?

Groeten,
Ronald
 
Ik heb geen idee wat je wilt bereiken maar ik denk dat je geen tabel moet aanmaken voor dat doel.

Om het verschil tussen twee data te bepalen gebruikt je het commando DATEDIFF

Enjoy!
 
Ik heb geen idee wat je wilt bereiken maar ik denk dat je geen tabel moet aanmaken voor dat doel.

Om het verschil tussen twee data te bepalen gebruikt je het commando DATEDIFF

Enjoy!


Ik zoek niet (alleen) het totaal aantal dagen tussen 2 datums, maar ik wil het aantal dagen toewijzen aan jaren. Dus als de periode 30/12/07 tot 03/01/08 is, dan wil ik 2 dagen in kolom 2007 en 2 dagen in kolom 2008 hebben staan.

Grtz!
 
In de eerste kolom wil je dus het aantal dagen weten tussen X en het einde van het jaar.
Dus DateDiff("d",X, Dateserial(2007,12,31))
Voor de tweede kolom wil je weten het aantal dagen in het nieuwe jaar, dus DateDiff("d", Dateserial(2008,1,1), Y)

In plaats van DateSerial zou je ook #31-12-2007# en #1-1-2008# maar dat werkt niet altijd.

HTH:D
 
In de eerste kolom wil je dus het aantal dagen weten tussen X en het einde van het jaar.
Dus DateDiff("d",X, Dateserial(2007,12,31))
Voor de tweede kolom wil je weten het aantal dagen in het nieuwe jaar, dus DateDiff("d", Dateserial(2008,1,1), Y)

In plaats van DateSerial zou je ook #31-12-2007# en #1-1-2008# maar dat werkt niet altijd.

HTH:D

Dat klint al een stuj meer richting de oplossing! :thumb:

Nu heb jij de datum nog "hard" in de formule geklopt, maar ik heb dus duizenden records met de datums in 2 kolommen. Moet ik die datums dan eerst uitelkaar trekken in jjjj, mm en dd? En kan ik daarna in de formule naar die kolom verwijzen?
dus: DateDiff("d",X, Dateserial(kolom-jjjj,kolom-mm,kolom-dd))?

En in jouw oplossing ga je ervan uit dat het "oude" jaar en het "nieuwe" jaar altijd 2007 en 2008 is, maar dit kan dus variabel zijn.
Ik heb bijvoorbeeld periode 01-03-2003 t/m 14-05-2006 en periode 22-05-2001 t/m 05-05-2008 etc....

Kan hier iets mee gedaan worden?
 
Je kan het statement voor je query een beetje aanpassen

Code:
DateDiff("d",[Tabelnaam].[Veldnaam1], [Tabelnaam].[Veldnaam])
of verwerkt in een query:
Code:
Select DateDiff("d",[Tabelnaam].[Veldnaam1], [Tabelnaam].[Veldnaam2]) as AantalDagen From Tabelnaam
Maar dit werkt natuurlijk over de jaarwisseling heen. Daar moet je dus iets op verzinnen.
Je kan het op meerdere manieren oplossen: Door een zooitje IIFjes op te nemen:
Code:
IIF(year(X) <> year(Y);DateDiff("d",X,DateSerial(year(X),12,31));DateDiff("d",X,Y))
en deze geld alleen als de jaren ongelijk zijn en dan is dit alleen de aanvulling tot de jaarwisseling.

Het wordt knap moeilijk te lezen. Beter zou zijn als je een Functie zou maken waarin je met VBA hetzelfde doet.
Het is alleen wel iets beter te lezen:
Code:
Public Function CalcDays(dtmStart as date, dtmEnd as date) as integer
' Statement 
'   IIF(year(X) <> year(Y);DateDiff("d",X,DateSerial(year(X),12,31));DateDiff("d",X,Y))
' Wordt dan:
    dim intRetVal as integer

    If year(dtmStart) <> year(dtmEnd) then
        intRetVal = DateDiff("d", dtmStart, DateSerial(year(dtmStart),12,31))
'
' en hier komt de rest.
'
        
End function

Kijk maar of je eruit kan komen.

HTH:D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan