Datumsberechnung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datumsberechnung

    Hallo,
    ich brauche einen Denkanstoß für die Berechnung der Anuahl von Arbeitstagen in einem MySql-String.

    Hintergrund in einer Datenbank sind zwei Datumsfelder, die Differenz soll nicht die Anzahl der Kalendertage sondern in Arbeitstagen erstellt werden. Ich dachte schon an eine Benutzerdefinierte Function, nur kann ich diese auch bei einem NT-Server mit MySql verwenden.

    Fribu

  • #2
    benutzerdefinierte Funktionen gibt´s doch erst in mySQL 4, oder?

    imho geht das am einfachsten per php:
    PHP-Code:
    $q mysql_query('select anfang, ende, weekday(anfang),
      to_days(anfang), to_days(ende) from tabelle'
    );
    while (list(
    $anfang,$ende,$w,$a,$z)=mysql_fetch_row($q))
    {
      
    $n 1+$z-$a;
      
    // Sams- und Sonntage abziehen
      
    for ($d $a$d<=$z$d++)
      {
        if (
    $w++>4$n--;
        
    $w %= 7;
      }
      echo 
    "$anfang bis $ende$n Arbeitstage<br>";

    Die Schleife kann man natürlich noch wegoptimieren und durch eine mehr oder weniger komplizierte Berechnung ersetzen.

    siehe auch im mySQL-Handbuch: Datums- und Zeit-Funktionen
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Danke für die Antwort.

      Die Lösung mit PHP ist einleuchtend. Ich habe nur das Problem in einer SQl-Abfrage: select sum( if(datum1 - datum2 < 10 ), 1, 0) .... wobei 10 in Arbeitstagen gerechnet werden muss, auch Feiertage.
      Hintergrund: Früher wurden solche Listen mit Excel erstellt und das kann Arbeitstage mittels Function berechnen. Jetzt muss das auch über php/mysql geschehen.

      Fribu

      Kommentar


      • #4
        hmm ... eine Möglichkeit wäre, alle Werktage oder alle Nicht-Werktage in einer zusätzlichen Tabelle zu speichern und die Anzahl der im Zeitraum mit einem count join per between zu ermitteln.

        select t.anfang, t.ende, count(w.datum)
        from tabelle t
        left join werktage w on w.datum between t.anfang and t.ende
        group by t.anfang, t.ende

        Die Erstellung der Tabelle Werktage ist zwar ein wenig aufwendig, aber vermutlich sinnvoller als eine seitenlange Funktion zur Ermittlung von Feiertagen in die Query einzubauen.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Hallo,
          so eine Arbeitstagfunction ist gar nicht so umfangreich, da sich ja fast alle Feiertage mit der Osterformel berechnen lassen und die Wochendenenden lassen sicher herauszählen. Die Referenztabelle hat den Nachteil ständig gepfegt werden zu müssen.
          Gibt es irgendwo eine vielleicht sogar deutschsprachige Dokumentation über das create function und ob sich das unter NT einbinden lässt. Ich arbeite mit MySql 3.36 und in der Doku gibt es bereits Create Function. Meine Vorstellung wäre so eine Feiertagsfunction in eine DLL einbinden, die dann von MySql verwendet wird ???

          Fribu

          Kommentar


          • #6
            Auf http://www.mysql.de/ ist das MySQL-Handbuch seit ein paar Wochen auch auf deutsch zu finden. Momentan scheint die Site aber leider down zu sein.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar

            Lädt...
            X