AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Frage zu Datumswerten

Ein Thema von fillibuster · begonnen am 15. Nov 2011 · letzter Beitrag vom 16. Nov 2011
Antwort Antwort
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#1

SQL Frage zu Datumswerten

  Alt 15. Nov 2011, 17:36
Datenbank: MySQL • Version: 5.1 • Zugriff über: PHP
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

Geändert von fillibuster (15. Nov 2011 um 17:39 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SQL Frage zu Datumswerten

  Alt 15. Nov 2011, 18:13
Was meinst du mit "nur mit MySQL"?
Markus Kinzler
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#3

AW: SQL Frage zu Datumswerten

  Alt 15. Nov 2011, 19:11
Hi,

Was meinst du mit "nur mit MySQL"?
die Query soll mir die Werte entsprechend zurückliefern, ohne dass ich diese noch mit PHP in Form bringe. Allerdings wird das bei monatsübergreifenden Daten schwer

Viele Grüße ....
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: SQL Frage zu Datumswerten

  Alt 15. Nov 2011, 20:53
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:
select Tag
  from AlleTage join
  deineTabelle on AlleTage.Tag between DeineTabelle.AnfangsDatum and DeineTabelle.EndDatum
Das dann mit diesem komischen Befehl in eine Zeile bringen und fertig ist das.

Aber wozu du das brauchst, ist mir ein Rätsel.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: SQL Frage zu Datumswerten

  Alt 15. Nov 2011, 21:19
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: SQL Frage zu Datumswerten

  Alt 15. Nov 2011, 22:44
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:
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)
p.s.: Irgendwie ist die Formatierung hops, aber man kann es glaub ich auch so erkennen.
Gruß, Jo
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: SQL Frage zu Datumswerten

  Alt 16. Nov 2011, 08:04
Eine Monster-Tabelle mit allen Datumswerten - dafür wäre mir der Speicherplatz zu schade
"Monster"? Kommst Du aus Lilliput? Na, wie viele Zeilen hätte die? 365*2000, also ca. 730.000 Zeilen, das ist doch nix. Dein Lieblingslied verbrät mehr Speicher.

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.

Geändert von Furtbichler (16. Nov 2011 um 08:08 Uhr)
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#8

AW: SQL Frage zu Datumswerten

  Alt 16. Nov 2011, 08:05
Hallo,
KA, wozu das gut sein soll, ...
Es geht darum einen Zeitraum in einem Monatskalender farbig darzustellen, aber wenn ich das so lese, mach ich das lieber schnell mit PHP.

Vielen Dank für eure Antworten
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
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