Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis? (https://www.delphipraxis.net/175917-alle-tage-zwischen-zeitraeumen-eines-jahres-als-sql-ergebnis.html)

fillibuster 29. Jul 2013 12:41

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:
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
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

Danke und viele Grüße

Der schöne Günther 29. Jul 2013 12:51

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?)

mkinzler 29. Jul 2013 13:05

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;

fillibuster 29. Jul 2013 13:08

AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1222945)
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.

Ja eigentlich hast du Recht. Die Datenbank stammt aus einer Delphianwendung, da ich aber gerade eine Webschnittstelle mit PHP schreibe muss ich ein wenig auf die Laufzeit achten (es wird eine Jahresübersicht).

Zitat:

Zitat von Der schöne Günther (Beitrag 1222945)
(Wieviel Urlaubstage im Jahr hat der arme Mensch?)

Gibt es bei euch mehr als 6 Tage Jahresurlaub? :shock: :mrgreen:

Furtbichler 29. Jul 2013 13:15

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:
Select Dates.Datum
from
  Dates join
  items
    on Dates.Datum between items.date_from and items.date_to
where items.year=2013
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.

Union 29. Jul 2013 14:00

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;

mkinzler 29. Jul 2013 14:02

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

Sir Rufo 29. Jul 2013 15:50

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?

p80286 29. Jul 2013 16:20

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

Furtbichler 29. Jul 2013 17:06

AW: Alle Tage zwischen Zeiträumen eines Jahres als SQL Ergebnis?
 
Zitat:

Zitat von p80286 (Beitrag 1222975)
Was noch schlimmer ist, er will wohl einen String mit allen Urlaubstagen haben.

Schlimmer? Da kennst Du mySQL schlecht.
Code:
select group_concat(dates.datum separator ', ')
  from ...
und fertig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 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