![]() |
Datenbank: MS-SQL • Version: 2008 R2 • Zugriff über: SQL
Select: Alle Tage des Monats
Ich benötige ein Select, dass mir eine Liste der Tage eines vorgegebenen Monats liefert. Beim aktuellen Monat nur bis zum aktuellen Datum.
Natürlich werden weitere Spalten gebildet, aber die sind auch vom jeweiligen Datum abhängig. Spontan habe ich keine Lösung dafür parat und Google hat mir auch nichts geliefert. Hat jemand eine gute Idee? |
AW: Alle Tage des Monats
Zitat:
Brauchst Du eigentlich einfach immer alle Tage oder nur die, zu denen es auch Einträge in der DB gibt? Denn im ersten Fall würde ich gar nicht über die Datenbank gehen, sondern die Tage über Hausmittel in der Sprache ermitteln. |
AW: Alle Tage des Monats
Ich bin neugierig geworden und habe mal nach "t-sql days of month" gegoogelt. Der Gockel lieferte mir das hier:
![]() Habe die Lösungen dort nicht selber getestet, aber das sieht doch nach dem aus, was du suchst, oder? |
AW: Alle Tage des Monats
Zitat:
Im Grunde kann man mit
Code:
starten. Das benötigt nichtmal ein "from".
Select GetDate()
Zitat:
Bisher habe ich das in Delphi in einer virtuellen Tabelle erstellt. Jetzt soll das aber als View ins System, damit ein dazu passender Report automatisiert ausgedruckt werden kann. Auch das ließe sich mit Delphi lösen, aber wir wollen nach Möglichkeit unser Konzept (ohne externe Programme) einhalten. |
AW: Alle Tage des Monats
Ah, sorry, erst durch deine zweite Antwort habe ich gesehen, dass du die Liste der Tage und nicht die Anzahl der Tage brauchst. Man liest halt manchmal auch, was man lesen will. :oops: Aber sollte sich dann damit nicht eine Schleife in SQL bauen lassen?
|
AW: Alle Tage des Monats
EDIT: zu langsam
|
AW: Alle Tage des Monats
Schau Dir mal das hier an:
![]() Du kannst damit eine Tabelle mit allen relevanten Daten generieren und die dann direkt abfragen. Ist wahrscheinlich schneller und effizienter als dynamische Daten jedes mal bei einer Abfrage zu generieren. Vor allem bei Reports ist das vermutlich effizienter, weil Du dann über passende Indexe gleich joinen kannst. |
AW: Alle Tage des Monats
@Phoenix:
Danke, das sieht auf den ersten Blick gut aus. Ich habe jetzt auch nochmal auf englisch recherchiert und folgendes gefunden: ![]() Mal sehen, was besser passt.:-D |
AW: Select: Alle Tage des Monats
Solche und ähnliche Fragen hatten wir hier schon öfter. Eine Rowgenerator Lösung ist m.E. am schnellsten und Ressourcen schonensten. Daraus kann man beliebige Datums ableiten.
Bei der Lösung in SO direkt im vorigen Post muss man natürlich mit maxrecursion 0/*!*/ aufpassen. Wenn der Nutzungsbereich klar ist, hier max 31 (Tage) würde ich das auch so einsetzen. Nicht das mal eine Endlosschleife auftritt, weil die Where Bedingung verschlampt wurde. Der Hinweis bezüglich fester Tabelle war schon ebenso häufig da. An diesem Punkt landet man sofort, sobald es Anforderungen zu Feiertagen, Arbeitstagen, regional, national, international usw. oder sonstigen harten Ressourcen in diesem Bereich gibt. |
AW: Select: Alle Tage des Monats
Google mal nach "Date Dimension Table". Es gibt fertigen Tabellen zum Einbauen in deine DB. Dann hast Du keine Sorgen mehr mit Auswertungen, die etwas mit Datumse zu tun haben.
|
AW: Select: Alle Tage des Monats
@jobo:
Wochenenden und Feiertage spielen bei dieser Auswertung zum Glück keine Rolle. Anderenfalls hätte ich eine entsprechende Tabelle eingerichtet. Bei meiner Lösung habe ich nicht den Weg mit der Rekursion genommen, sondern die Hilfstabelle aus dem zweiten Lösungsansatz. Funktioniert einwandfrei. @Dejan Vu: Da bin ich gestern (etwas später) auch noch drauf gestoßen. Das behalte ich auf jeden Fall im Hinterkopf. @All: Danke für eure Hilfe :thumb: |
AW: Select: Alle Tage des Monats
Ich habe eine Date Dimension in jeder Datenbank. Benötigt wird die immer. Irgendwann.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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 by Thomas Breitkreuz