Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DATEDIFF ohne Wochenenden (https://www.delphipraxis.net/180586-datediff-ohne-wochenenden.html)

youuu 31. Mai 2014 18:15

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:
DATEDIFF(now(), P.datum)
Hab ich bislang, darin werden allerdings natürlich nicht die Wochenende abgezogen.

himitsu 31. Mai 2014 18:35

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.

youuu 31. Mai 2014 18:38

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:
AND (DATEDIFF(now(), P.datum) > 26) // ohne Wochendtagen, also nur Werktage
Dachte da an die Funktion WEEKDAY(date)

"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 ;)

himitsu 31. Mai 2014 18:41

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.

youuu 31. Mai 2014 18:54

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. ;/

Dejan Vu 31. Mai 2014 19:01

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:
select sum(istWochenTag)
from DatumsTabelle
where Datum between :Then and :Now
Arbeitstage:
SQL-Code:
select sum(istArbeitsTag)
from DatumsTabelle
where Datum between :Then and :Now
usw. usw.

Solche Tabellen werden bei DWH auch 'Date Dimension Table' genannt. Es gibt Generatoren und fertige EXCEL/CSV-Tabellen im Internet. Einfach mal googeln.

himitsu 31. Mai 2014 19:10

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.

youuu 31. Mai 2014 19:13

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.

Dejan Vu 31. Mai 2014 19:19

AW: DATEDIFF ohne Wochenenden
 
Zitat:

Zitat von himitsu (Beitrag 1260910)
Man kann sich solche "Tabellen" auch dynamisch generieren.

Das mit den gesetzlichen Feiertagen je Bundesland oder Betriebsversammlungen etc. ist nicht so einfach dynamisch hinzubekommen. Übrigens sind das keine "Tabellen" sondern Tabellen. Für Auswertungen sogar eine der wichtigten.

@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.

youuu 31. Mai 2014 21:02

AW: DATEDIFF ohne Wochenenden
 
Ok ich schau es mir mal an.

Habe das hier gefunden: https://gist.github.com/johngrimes/408559


Edit: ok habe mir nun solch eine Tabelle angelegt.

http://www.kebos.de/Unbenannt.png

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 17:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz