Ich versuche, die Anzahl der Tage zwischen zwei verschiedenen Daten außer den Wochenenden zu ermitteln.
Ich weiß nicht, wie ich dieses Ergebnis erzielen soll.
postgresql
datetime
Pragati Basa
quelle
quelle
Antworten:
Angenommen, mit "Wochenende" meinen Sie Samstag und Sonntag , kann dies noch einfacher sein:
Sie benötigen keine zusätzliche Unterabfrageebene für
generate_series()
. SRF (Set Returning Functions), auch als "Tabellenfunktionen" bezeichnet, kann genau wie Tabellen in derFROM
Klausel verwendet werden.Sie daher vor allem
generate_series()
enthält die obere Grenze in dem Ausgang, so lange wie ein Vollintervall (3. Parameter) passt. Die Obergrenze wird nur ausgeschlossen, wenn das letzte Intervall abgeschnitten würde, was bei vollen Tagen nicht der Fall ist.Mit dem Muster
ISODOW
für EXTRACT () werden Sonntage7
gemäß dem ISO-Standard gemeldet . Ermöglicht einen einfacherenWHERE
Zustand.Rufen Sie lieber
generate_series()
mittimestamp
Eingabe an. Hier ist warum:count(*)
ist etwas kürzer und schneller alscount(the_day)
in diesem Fall.Um eine Unter- und / oder Obergrenze auszuschließen , addieren / subtrahieren Sie 1 Tag entsprechend. In der Regel können Sie die untere und die obere Grenze einschließen:
quelle
In diesem Beispiel werden alle Daten zwischen dem 15.12.2013 und dem 02.01.2014 (einschließlich) aufgelistet. Die zweite Spalte gibt den Wochentag an (numerisch zwischen 0 und 6). In der dritten Spalte wird angegeben, ob der Wochentag ein Samstag / Sonntag ist oder nicht (Sie müssen anpassen, was Sie als Wochenende betrachten) und was zum Zählen von Wochentagen verwendet werden kann.
quelle
Angenommen, ein Wochenende ist Samstag und Sonntag, können Sie die folgende SQL verwenden.
Ersetzen Sie die Daten durch Ihre Auswahl und die (0,6) durch die Wochentage, die Sie ausschließen möchten.
Einige Dinge, die Sie beachten müssen: -
Sie haben nicht erwähnt, welche Version von PostgreSQL Sie ausführen. Dies funktioniert unter 9.1+, sollte aber unter niedrigeren Versionen funktionieren.
Die ausgewählten Daten sind bei Verwendung von generate_series inklusive. Wenn Sie also Tage dazwischen möchten, fügen Sie jedem Datum 1 Tag hinzu.
quelle
Es gibt einige Dinge, die Sie tun können, um dies zu vereinfachen. Die Methode, die ich verwenden würde, wäre sicherzustellen, dass eine Tabelle mit Daten verfügbar ist. Sie können schnell eine erstellen, wie folgt:
Sobald die Tabelle erstellt wurde, sollten Sie sie relativ schnell mit Datumsdaten füllen können.
Sie können Ihre Abfrage dann als schnelle Anzahl von Datensätzen aus dieser Tabelle schreiben.
quelle
Ich empfehle Ihnen, eine Funktion zu erstellen, die Sie verwenden können, wann immer Sie möchten, und weniger zu schreiben. )
Dieser obige Code erstellt eine SQL-Funktion, die die Anzahl der Wochenendtage (Sa, So) zählt und zurückgibt. So wie Sie diese Funktion flexibler nutzen können.
Danach können Sie mit der Funktion nur die Anzahl der Wochenendtage in einem Intervall zurückgeben. Hier ist das zu verwendende Beispiel:
Diese Auswahl muss vier zurückgeben, da der erste und der zweite Tag Montag sind und wir zwei Samstage und zwei Sonntage dazwischen haben.
Nun, nur für die Rückkehr Werktagen (ohne Wochenende), wie Sie wollen , nur eine Subtraktion machen, wie im folgenden Beispiel:
quelle
quelle