PDA

Vollständige Version anzeigen : DateDiff Tage in Tag / Monat / Jahr anzeigen?


Kövener
11.05.2011, 10:27
Hallo,


ich habe eine Abfrage mit DateDiff Option erstellt.
*************************************************************
SELECT tblVL.lfd_Nr, tblVL.Eingang, tblVL.Urteil, tblVL.Disziplinargerichtsbescheid, tblVL.art,
DateDiff("d",tblVL.Eingang,tblVL.Urteil) AS Verweildauer1, DateDiff("d",tblVL.Eingang,Disziplinargerichtsbescheid) AS Verweildauer2, DateDiff("d",tblVL.Eingang,art) AS Verweildauer3,
DateDiff("d",tblVL.Eingang,Now()) AS Verweildauer4
FROM tblVL;
*****************************************************************

Ich bekomme die Ergebnisse auch richtig in Tagen angezeigt.

Gibt es einen Möglichkeit das Ergebnis auch z.B. in “1 Jahr 3 Monate und 22 Tage“
anzeigen zu lassen?

Atrus2711
11.05.2011, 10:34
Hi,

bei sowas frag ich mich immer: wie lang ist ein Jahr (Schaltjahr?!), und wie lang ist ein Monat (28-31 Tage)? Die wechseln! Und auch wenn ich heute 36 Jahre bin, heißt das lediglich, dass bisher 36 Mal Tag und Monat meiner Geburt wiederkehrten.

Tage in Jahre, Monate und Tage umzurechnen geht

"durchschnittlich" (364,25 Tage p.a.)
oder wirklich nur für den Einzelfall (gerade wegen Schaltjahren etc)

Edgar Basler
11.05.2011, 10:41
Wie lange ein Jahr ist, ist schon fast als philosophische Frage zu werten. Nach meinem Kenntnisstand ist ein Jahr definiert als sich ein wiederholendes Datum. Genauso beim Monat. deshalb verwende ich die Funktion Datediff nur:

1.) wenn Differenz kleiner als 1 Monat ist oder
2.) wenn ich wirklich die Anzahl der Tage benötige.

Wenn ich eine Auswertung Jahr, Monat, Tag benötige, extrahiere ich immer zuerst die Jahre und Monate und nehme dann am Schluß die Datediff-Funktion für die restliche Anzahl der Tage.

Ich hoffe, ich konnte erklären wie ich vorgehe.

Kövener
11.05.2011, 10:45
Der Durchschnitt (364.25 Tage p.a.) würde mir ja vollkommen reichen.

Welche Formel muss ich eingeben um das Ergebnis in Tagen Monate und Jahr zu bekommen?

Ich habe schon an vielen Stellen gesucht aber noch nicht das richtige gefunden.

Atrus2711
11.05.2011, 10:57
Hi,

die billigste Lösung dürfte sein, eine Hilfsfunktion zu schreiben, die das kapselt. Für das Alter in Jahren hat Donkarl schon eine Lösung (). Für den Monat könnte man das analog noch aufdröseln.

Edgar Basler
11.05.2011, 10:58
Vielleicht geht es einfacher, aber dies führt auch zum Ziel:

Jahre: Wenn(Monat([eintrittsdatum])<Monat([austrittsdatum]);Jahr([austrittsdatum])-Jahr([eintrittsdatum]);Wenn(Monat([eintrittsdatum])=Monat([austrittsdatum]);Wenn(Tag([eintrittsdatum])>Tag([austrittsdatum]);Jahr([austrittsdatum])-Jahr([eintrittsdatum])-1;Jahr([austrittsdatum])-Jahr([eintrittsdatum]));Jahr([austrittsdatum])-Jahr([eintrittsdatum])-1))

Monate: Wenn(Monat([eintrittsdatum])<Monat([austrittsdatum]);Monat([austrittsdatum])-Monat([eintrittsdatum]);Wenn(Monat([eintrittsdatum])=Monat([austrittsdatum]);Wenn(Tag([eintrittsdatum])>Tag([austrittsdatum]);Monat([austrittsdatum])-Monat([eintrittsdatum])-1+12;Monat([austrittsdatum])-Monat([eintrittsdatum]));Monat([austrittsdatum])-Monat([eintrittsdatum])+12))

Edgar Basler
11.05.2011, 11:01
Die Tage mußte ich einer 2. Antwort reinpacken:

Tage: Wenn(Tag([eintrittsdatum])<Tag([austrittsdatum]);Tag([austrittsdatum])-Tag([eintrittsdatum]);Tag([austrittsdatum])-Tag([eintrittsdatum])+Tag(DatSeriell(Jahr([eintrittsdatum]);Monat([eintrittsdatum]);0)))

Die Tagesberechnung wird nicht komplett angezeigt ..... Warum ???? Keine Ahnung

Maxel
11.05.2011, 12:04
Hallo Edgar,

schreibe & l t ; (ohne Leerzeichen) statt <
oder setze vor und hinter < ein Leerzeichen.

"<" direkt gefolgt von einem Buchstaben, wird als Tag angesehen.

Edgar Basler
11.05.2011, 12:30
So - nun noch ein Versuch:

Tage: Wenn(Tag([eintrittsdatum]) < Tag([austrittsdatum]);Tag([austrittsdatum])-Tag([eintrittsdatum]);Tag([austrittsdatum])-Tag([eintrittsdatum])+Tag(DatSeriell(Jahr([eintrittsdatum]);Monat([eintrittsdatum]);0)))

Edgar Basler
11.05.2011, 12:31
Danke habe ich nicht gewußt - schon wieder was dazu gelernt.

Hallo Edgar,

schreibe & l t ; (ohne Leerzeichen) statt <
oder setze vor und hinter < ein Leerzeichen.

"<" direkt gefolgt von einem Buchstaben, wird als Tag angesehen.

Lanz Rudolf
12.05.2011, 07:02
Hallo
Feldname Tag ist nicht ein guter Feldname
Achtung Reserviertes Wort in Access / SQL (Deutsche Access version)

Tag (Engl. bez. für Marke)

und auch Jahr und Monat nicht als Feldnamen verwenden ! Reservierte Worte (Deutsche Access version)!

Klicke auf den Link inmeiner Fusszeile hiner Meine Doc
öffne die Pdf-Datei
Lies ab der Seite 26. (3.5 Feldnamen)




noch was zu Differenz in Monaten:
Beim Beispiel differenz zwichen 31.03.2006 und 01.11.2006
Liefert Datediff( "m" ,"31.03.2006" , "01.11.2006") gibt 8 was nicht umbedingt richtig ist
Besser mit Tagen Arbeiten:
Round(( Datediff( "d" ,"31.03.2006" , "01.11.2006") * 12) / 365 ) das giebt 7
möglich das man noch prüfen müsste ob es ein Schaltjahr mit 366 Tagen ist oder nicht .

Scorefun
12.05.2011, 07:50
hier gibt's auch was dazu :
http://www.konschak.de/tipps/tip06.htm