![]() |
Datenbank: MySQL • Version: 5.1 • Zugriff über: PHP
SQL Frage zu Datumswerten
Hallo,
in meiner Tabelle speichere ich Start- und Enddaten von Zeiträumen. DIe Frage ist, ob ich mir alle Daten (Tage) eines Zeitraumes von MySQL zurückgeben lassen kann. Beispiel: startdatum: 2011-11-15 enddatum: 2011-11-21 Rückgabe: array(15,16,17,18,19,20,21) Geht das nur mit MySQL? Viele Grüße .... //Edit: Es gehen natürlich auch mehrere Zeiträume in einem Monat |
AW: SQL Frage zu Datumswerten
Was meinst du mit "nur mit MySQL"?
|
AW: SQL Frage zu Datumswerten
Hi,
Zitat:
Viele Grüße .... |
AW: SQL Frage zu Datumswerten
KA, wozu das gut sein soll, aber in richtigen RDBMS macht man sowas mit einer UDF. mySQL kennt aber so ein komischen Befehl, wo man Werte einzelner Records in einer Zeile darstellen kann.
Du bastelst Du also eine Tabelle, die alle Tage seit dem 1.1.0000 enthält ('AlleTage') Dann ein
Code:
Das dann mit diesem komischen Befehl in eine Zeile bringen und fertig ist das.
select Tag
from AlleTage join deineTabelle on AlleTage.Tag between DeineTabelle.AnfangsDatum and DeineTabelle.EndDatum Aber wozu du das brauchst, ist mir ein Rätsel. |
AW: SQL Frage zu Datumswerten
Das ist ein klassischer Fall für eine Stored Procedure
Dort in einer temporären Tabelle die Datumswerte zusammenstellen und dann entweder als Result-Set oder über GROUP_CONCAT als VARCHAR zurückliefern. Eine Monster-Tabelle mit allen Datumswerten - dafür wäre mir der Speicherplatz zu schade ;) |
AW: SQL Frage zu Datumswerten
Du kannst auch eine Monstertabelle nehmen, die bereits existiert und dich daran "anlehnen". Dann geht es mit einem bloßen Select Statement oder einer View. Je nach Bedarf dann mit Offset und Einschränkungen arbeiten. In jedem Fall sollte sichergestellt sein, dass die Basistabelle groß genug ist. Bei Verwendung eines variablen Offset ist das allerdings machbar.
Im Prinzip erzeugst Du mittels der Basistabelle ein fortlaufende Nummer, die Du in ein Datum umwandelst. Das musst Du nur noch nach Bedarf formatieren. Etwa so:
SQL-Code:
p.s.: Irgendwie ist die Formatierung hops, aber man kann es glaub ich auch so erkennen.
mysql> select curdate();
+------------+ | curdate() | +------------+ | 2011-11-15 | +------------+ 1 row in set (0.00 sec) mysql> # Jahreswechsel, relativ zu curdate (s.o) mysql> SELECT ADDDATE(Curdate(), INTERVAL rownum+40 DAY) -> FROM (SELECT IF(@a, @a := @a + 1, @a := 1) - 1 AS rownum -> FROM information_schema.TABLES t, -> (SELECT @a := 0) r) x -> WHERE x.rownum < 10; +--------------------------------------------+ | ADDDATE(Curdate(), INTERVAL rownum+40 DAY) | +--------------------------------------------+ | 2011-12-25 | | 2011-12-26 | | 2011-12-27 | | 2011-12-28 | | 2011-12-29 | | 2011-12-30 | | 2011-12-31 | | 2012-01-01 | | 2012-01-02 | | 2012-01-03 | +--------------------------------------------+ 10 rows in set (0.00 sec) mysql> # Schaltjahr 2011, Februar, relativ zu curdate (s.o) mysql> SELECT ADDDATE(Curdate(), INTERVAL rownum-265 DAY) -> FROM (SELECT IF(@a, @a := @a + 1, @a := 1) - 1 AS rownum -> FROM information_schema.TABLES t, -> (SELECT @a := 0) r) x -> WHERE x.rownum < 10; +---------------------------------------------+ | ADDDATE(Curdate(), INTERVAL rownum-265 DAY) | +---------------------------------------------+ | 2011-02-23 | | 2011-02-24 | | 2011-02-25 | | 2011-02-26 | | 2011-02-27 | | 2011-02-28 | | 2011-03-01 | | 2011-03-02 | | 2011-03-03 | | 2011-03-04 | +---------------------------------------------+ 10 rows in set (0.00 sec) |
AW: SQL Frage zu Datumswerten
Zitat:
Die Monstertabelle hat einen kleinen Vorteil. Du kannst mal eben Wochenenden und Feiertage mit ablegen, und auch sonst lustige Details wie z.B. "letzter Tag des Monats". Letzteres ist sehr wichtig für Rechnungslegung usw. Sowas kann man auch ausrechnen, aber bei Datenbanken rechnet man nicht blöd rum , man aggregiert höchstens mal. Auch so kniffeliege Fragen wie 'wieviele Arbeitstage liegen zwischen dem 1.10.2011 und 12.11.2011' lässt sich mit dieser Monstertabelle instantan und ohne Nachdenken beantworten. Falls man es braucht. |
AW: SQL Frage zu Datumswerten
Hallo,
Zitat:
Vielen Dank für eure Antworten :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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