![]() |
Datenbank: Mysql • Version: 5.1 • Zugriff über: Devart
DATEDIFF ohne Wochenenden
Hi,
ich möchte gerne die Tage zwischen 2 Datum's berechnen per DATEDIFF, allerdings ohne Wochenenden. Wie mach ich das am besten?
Delphi-Quellcode:
Hab ich bislang, darin werden allerdings natürlich nicht die Wochenende abgezogen.
DATEDIFF(now(), P.datum)
|
AW: DATEDIFF ohne Wochenenden
Entweder:
Du berechnest die Differenz, läufst dann in einer Schleife die Wochenen dazwischen durch ziehst Diese ab. Oder du berechnest die Differenz, dann werden davon die Tage bis zum nächsten Wochenende (Samstag) abgezogen (in X speichern), danach kann man das durch 7 Teilen und bekommt die Anzahl der Wochen, womit man die entsprechende Anzahl der Samstage abziehen kann und dann wird von X nochmal 1 abgezogen, ebenfalls durch 7 teilen und die entsprechende Anzahl an Sonntagen abziehen. Ach ja, wenn der Anfang ein Sonntag war, dann nochmal 1 abziehen, da Dieser ja beim Sprung bis zum Samstag übergangen wurde. |
AW: DATEDIFF ohne Wochenenden
Wie ich das berechne in Delphi selbst weiß ich, ich möchte es aber direkt in der MySql Abfrage realisieren.
Delphi-Quellcode:
Dachte da an die Funktion WEEKDAY(date)
AND (DATEDIFF(now(), P.datum) > 26) // ohne Wochendtagen, also nur Werktage
"Returns the weekday index for date (0 = Monday, 1 = Tuesday, … 6 = Sunday)." Wie ich das integrieren kann in die Abfrage, weiß ich allerdings nicht genau, da ich nicht gerade der Datenbanker bin ;) |
AW: DATEDIFF ohne Wochenenden
Entweder besitzt mySQL eine fertige Funktion dafür, oder du schreibst dir eben selber Eine. :stupid:
[add] Wobei Google meint, daß es das wohl nicht gibt, denn es gibt mehrere Suchanfragen dafür (Wochenende, Werktage usw.), wobei es überall am Ende auf eine eigene Implemantation hinaus geht. Das Ganze lässt sich letztendlich auch in einer kleinen Formel zusammenfassen. Für Postgres hatte ich das mal als Funktion geschrieben, wobei dort auch noch Feiertage abgezogen werden. |
AW: DATEDIFF ohne Wochenenden
Nein gibt leider keine Funktion von Mysql dafür. Eine selber schreiben für Mysql, wüsst ich gar nicht wie ich das machen soll.
Ich wollte halt ungern das noch mal separat im Programm machen. edit: ich konnte auch keine Funktion finden, die die anzahl an Wochenenden ausgibt. ;/ |
AW: DATEDIFF ohne Wochenenden
Wenn Du das häufiger brauchst und vielleicht auch Feiertage mit einbeziehen willst, baue dir eine Datumstabelle, mit den Spalten 'Datum', 'IstArbeitstag', 'IstWochenTag' usw. Vielleicht noch die KW usw. Sehr praktisch, so eine Tabelle.
Um dann die Anzahl der Wochentage zu ermitteln:
SQL-Code:
Arbeitstage:
select sum(istWochenTag)
from DatumsTabelle where Datum between :Then and :Now
SQL-Code:
usw. usw.
select sum(istArbeitsTag)
from DatumsTabelle where Datum between :Then and :Now Solche Tabellen werden bei DWH auch 'Date Dimension Table' genannt. Es gibt Generatoren und fertige EXCEL/CSV-Tabellen im Internet. Einfach mal googeln. |
AW: DATEDIFF ohne Wochenenden
Man kann sich solche "Tabellen" auch dynamisch generieren.
mySQL kann doch bestimmt auch sowas wie Sequenzen? - eine Reihe von Datumswerten über den gewünstschen Zeitraum generieren - im WHERE die Wochendenden ignorieren - und ebenfalls via COUNT zählen. |
AW: DATEDIFF ohne Wochenenden
Ich glaube das dass zu OP für meine Abfrage ist. Werde das dann wohl lieber direkt im Programm lösen müssen.
|
AW: DATEDIFF ohne Wochenenden
Zitat:
@youuu: Mag schon sein, das derzeit ein Overkill ist. Aber wen Du mal Zeit hast, bau dir die mal. Hab ich auch gemacht. Mit allen Datum zwischen 1970 und 2100 (ok, da wird man wohl die Feiertage und Betriebsversammlungen anpassen müssen). Die Tabelle wandert in alle Projekte rein. Einmal gemacht, immer profitiert. Dann ist das gar nicht mehr OP. |
AW: DATEDIFF ohne Wochenenden
Ok ich schau es mir mal an.
Habe das hier gefunden: ![]() Edit: ok habe mir nun solch eine Tabelle angelegt. ![]() Nur wie binde ich das nun richtig in meine Abfrage ein? Abfrage sieht momentan noch so aus: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz