Announcement

Collapse
No announcement yet.

Ermittlung jeden n-ten Wochentag im Monat

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ermittlung jeden n-ten Wochentag im Monat

    Hallo!

    Ich möchte mir einen eigenen Dialog für Serientermine bauen, so wie man es evtl. von Outlook kennt.

    Dabei gibt es bekanntlich verschiedene Möglichkeiten, das Serienmuster festzulegen (täglich, wöchentlich, monatlich, jährlich), als auch die Dauer (n-Termine, bis einschließlich …). Nun frage ich mich, wie ich alle Termine ermittle, wenn die Auswahl lautet: „Jeden n-ten Wochentag im Monat“, also z.B. jeden 3. Dienstag im Monat.

    Diese Termine möchte ich in eine datatable schreiben, um damit weiter zu arbeiten.

    Vielen Dank

    Marco

  • #2
    Was sind "alle" für 1 Jahr für 10 Jahre?

    Den Wochentag des 1. Tages im Monat ermitteln. Dann kannst du den 3. Dienstag berechnen
    Christian

    Comment


    • #3
      Es gibt je nach Problemstellung diverse Lösungen.
      Man könnte sich künstlich eine fortlaufende Nr erzeugen und daraus ein fortlaufendes Datum bauen, dass man auf den gewünschten Wochentag filtert. Hier ein Beispiel mit Oracle Funktionen.
      Es gibt verschiedene Verfahren für Rowgeneratoren und die DayOfWeek Prüfung ist auch von System zu System verschieden.
      [highlight=sql]
      select to_char(nextdays, 'D') as WochentagNr, -- visualisation of filter
      to_char(nextdays, 'Day') as Wochentag, -- visualisation of filter
      nextdays -- resulting date
      from (SELECT trunc(sysdate) + ROWNUM as nextdays -- current date offset + Row No from generator for sequential date value generation
      from (SELECT 1 dummy FROM dual CONNECT BY LEVEL <= 365)) -- row generator, limited to one year
      where to_char(nextdays, 'D') = 1 -- filtering of weekday
      [/highlight]

      Ich seh grad, Du wolltest jeden 3. Dienstag, nicht jeden. Könnte man wahrscheinlich mit Modulo und zusätzlichem Filter auch machen.
      Der zugrundeliegende Rowgenerator funktioniert sicher nicht unendlich, sowas muss man nach Bedarf eingrenzen. Da kein einziger Tabellenzugriff erfolgt (außer auf DUAL) könnte es halbwegs schnell sein.
      Ehrlich gesagt, ich hab mich schon mal gefragt, wie sowas in großen Systemen realisiert wird. Wird da wirklich bis ins Jahr 3000 eine Tabelle mit Terminen vollgeschrieben?
      Vielleicht wird bei Serienterminen ja auch eine Regel gespeichert, die "online" über den jeweils abgefragt Zeitraum die Echtdaten ausspuckt.
      Gruß, defo

      Comment


      • #4
        Ich würde das ja nicht mittels DB lösen, sondern programmatisch. 1. Wochentag im Monat. Dann die Differenz zum gewünschten Tag multipliziert mit den Wochen...so in der Art.

        Ehrlich gesagt, ich hab mich schon mal gefragt, wie sowas in großen Systemen realisiert wird. Wird da wirklich bis ins Jahr 3000 eine Tabelle mit Terminen vollgeschrieben?
        Warum nicht in regelmäßigen Abständen einen CronJob o.a. der nur die Termin für x-Wochen bereitstellt....
        Zuletzt editiert von Christian Marquardt; 11.09.2013, 17:25.
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Ich würde das ja nicht mittels DB lösen, sondern programmatisch. 1. Wochetag im Monat. Dann die Differenz zum gewünschten Tag multipliziert mit den Wochen...so in der Art.
          Klar, eine Berechnung ist auch möglich, aber es war ja SQL gefragt.

          Warum nicht in regelmäßigen Abständen einen CronJob o.a. der nur die Termin für x-Wochen bereitstellt....
          Wenn ich aus irgendeinem Grund in meinem Outlook 2 Jahre nach vorne blätter, stehen die Serientermine auch drin.
          Nicht das ich das wirklich jemals ernsthaft gebraucht hab, aber börsennotierte Großunternehmen, die Ihren Fünfjahresplan, äh Forecast basteln müssen, können sicher nicht ohne.
          Gruß, defo

          Comment


          • #6
            Klar, eine Berechnung ist auch möglich, aber es war ja SQL gefragt.
            Herrlich Wir sind im VB.Net Ordner unser Rookie hat nur zufällig (oder auch nicht) SQL in seinen Namen.

            Comment


            • #7
              Klar, eine Berechnung ist auch möglich, aber es war ja SQL gefragt.
              Nein -> NET Windows -> VB

              Wenn ich aus irgendeinem Grund in meinem Outlook 2 Jahre nach vorne blätter, stehen die Serientermine auch drin.
              Ja, macht Lotus Notes auch. Der Androidkalender fragt nach und hat zur Auswahl so 10 Jahre, 50 Jahre usw. Naja letzteres erlebe ich nicht mehr...
              Christian

              Comment


              • #8
                Originally posted by Ralf Jansen View Post
                Herrlich Wir sind im VB.Net Ordner unser Rookie hat nur zufällig (oder auch nicht) SQL in seinen Namen.
                Fast, ich glaub, das Datatable hat mich "gepackt". Herrlich oder Peinlich sei dahingestellt.
                Gruß, defo

                Comment


                • #9
                  Originally posted by defo View Post
                  Fast, ich glaub, das Datatable hat mich "gepackt". Herrlich oder Peinlich sei dahingestellt.
                  Wie so ein Name, der bekanntlich Schall und Rauch ist, doch für Irritationen sorgen kann ...

                  Wie dem auch sei: ich versuch es erstmal mit der Methode von Christian. Das soll wohl funktionieren.

                  Comment

                  Working...
                  X