![]() |
Datenbank: MySQL • Version: 5x • Zugriff über: PHP
Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Hallo,
ich habe in meiner Datenbank die Urlaube der Mitarbeiter mit Datetime Felder (date_from,date_to) gespeichert. Nun möchte ich mir für alle angegebenen Zeiträume eines Jahres die kompletten Tage ausgeben lassen. Pseudo Beispiel:
Code:
Ich möchte aber 12.07.2013,13.07.2013,14.07.2013,15.07.2013,21.12. 2013,22.12.2013,23.12.2013 als Ergebnis bekommen
SELECT * FROM items WHERE year=2013 ergibt
date_from: 12.07.2013 | date_to: 15.07.2013 date_from: 21.12.2013 | date_to: 23.12.2013 Danke und viele Grüße |
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Ich habe mit Datenbanken nicht viel am Hut, aber wäre denn nicht gerade das eigentlich ein Fall für Programmlogik? Du hast es doch auch extra so in deine DB gepackt. Außerdem ist es so sicher einfacher, wenn man jetzt bsp. Wochenende oder gesetzliche Feiertage wieder abziehen will.
(Wieviel Urlaubstage im Jahr hat der arme Mensch?) |
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Wenn nur Arbeitstage in den Zeiträumen sind
SQL-Code:
SELECT DATEDIFF( date_to, date_from) FROM items WHERE year=2013;
|
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Zitat:
Zitat:
|
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Du benötigst eine Tabelle, in der alle Datumse (meine vollkommen falsche Pluralbildung von Datum) drinstehen. Nennen wir sie 'Dates', mit einer Spalte 'Datum'
Code:
Ergäbe dann eine Liste aller Tage des Urlaubs. Wenn deine 'Dates' Tabelle noch Flags für 'Wochenende','Feiertag' usw. hat, dann kannst Du diese auch noch herausfiltern und die dann relevanten Urlaubstage ausrechnen.
Select Dates.Datum
from Dates join items on Dates.Datum between items.date_from and items.date_to where items.year=2013 |
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
So wie ich es verstanden habe ist dort nur das Anfangs- und Enddatum jedes Urlaubs gespeichert. Dann sollte es in etwa so gehen (für MySQL sind bestimmt noch Anpassungen nötig):
Code:
declare @dVon date;
declare @dBis date; try create table #temp (Urlaubstag date); catch all end try; @dVon = '2013-07-01'; @dBis = '2013-07-31'; while @dVon <= @dBis do insert into #temp values (@dVon); @dVon = @dVon+1; end while; select * from #temp; select urlaubstag from #temp; |
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Das ergibt aber auch kein anderes Ergebis als die Lösung mit DateDiff()
Man müsste hier noch WE und Feiertage ausschliessen |
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Evtl. verstehe ich die Frage auch falsch, aber kann es nicht sein, dass der TE eine Liste mit den Datumswerten haben möchte, anstatt der reinen Anzahl der Tage?
|
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Ich denke Da liegst Du richtig.
Was noch schlimmer ist, er will wohl einen String mit allen Urlaubstagen haben. Gruß K-H |
AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
Zitat:
Code:
und fertig.
select group_concat(dates.datum separator ', ')
from ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 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