Guten Morgen,
ich bin mir sicher dass es möglich ist, komme aber nicht drauf.
Wie kann man per SQL-Statement (embedded HSQLDB) eine Spalte, in der alle Tage zwischen zwei vorgegebenen Daten im Format DATE angezeigt werden, erzeugen?
Hat jemand einen Ansatz?
Gruß Rik
Kalender
Moderator: Moderatoren
Kalender
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- ********
- Beiträge: 4330
- Registriert: Di, 22.06.2004 12:02
- Wohnort: 71134 Aidlingen
- Kontaktdaten:
Re: Kalender
Hallo Rik,
hier ein Beispiel:
Beim Öffnen der Abfrage wirst Du nach dem Inhalt der Parameter Datum1 und Datum2 gefragt.
hier ein Beispiel:
Code: Alles auswählen
SELECT "Geburtsdatum" AS "Datum" FROM "Tabelle1" WHERE "Geburtsdatum" >= :Datum1 AND "Geburtsdatum" <= :Datum2
Gruß
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Re: Kalender
Hallo Peter,
da habe ich mich wohl missverständlich ausgedrückt.
Ich möchte nicht spezielle Datensätze einer Tabelle, die eine Spalte "Datum" hat selektieren, sondern eine Spalte aller im Kalender aufeinanderfolgenden Tage zwischen zwei Daten als Datum erzeugen.
Klar benötigt man irgendwo eine Tabelle als Grundlage, ich denke, die könnte aus dem INFORMATION_SCHEMA genommen werden.
z.B.:
Datum
01.01.2012
02.01.2012
.
.
.
03.09.2012
04.09.2012
05.09.2012
Ich bin mir relativ sicher, dass dies mit den Datumsfunktionen, count , join und irgendwo einem +1 möglich sein müßte.
Gruß Rik
da habe ich mich wohl missverständlich ausgedrückt.
Ich möchte nicht spezielle Datensätze einer Tabelle, die eine Spalte "Datum" hat selektieren, sondern eine Spalte aller im Kalender aufeinanderfolgenden Tage zwischen zwei Daten als Datum erzeugen.
Klar benötigt man irgendwo eine Tabelle als Grundlage, ich denke, die könnte aus dem INFORMATION_SCHEMA genommen werden.
z.B.:
Datum
01.01.2012
02.01.2012
.
.
.
03.09.2012
04.09.2012
05.09.2012
Ich bin mir relativ sicher, dass dies mit den Datumsfunktionen, count , join und irgendwo einem +1 möglich sein müßte.
Gruß Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- ********
- Beiträge: 4330
- Registriert: Di, 22.06.2004 12:02
- Wohnort: 71134 Aidlingen
- Kontaktdaten:
Hallo Rik,
ich komme nicht dahinter, was Du meinst. Du schreibst einerseits von Spalten erzeugen, führst aber in Deinem Beispiel Zeilen (=Datensätze) auf.
Spalten können nur mittels ALTER TABLE ADD Column erzeugt werden.
Count = Zählt Datensätze
JOIN (INNER oder OUTER) = verbindet Datenbanktabellen
Kann es sein, dass Du automatisiert Datensätze mit einem Von und Bis Datum erzeugen möchtest ? Ob dies per SQL möglich ist, bin ich überfragt. In Verbindung mit einer Programmiersprache geht's auf jeden Fall.
ich komme nicht dahinter, was Du meinst. Du schreibst einerseits von Spalten erzeugen, führst aber in Deinem Beispiel Zeilen (=Datensätze) auf.
Spalten können nur mittels ALTER TABLE ADD Column erzeugt werden.
Count = Zählt Datensätze
JOIN (INNER oder OUTER) = verbindet Datenbanktabellen
Kann es sein, dass Du automatisiert Datensätze mit einem Von und Bis Datum erzeugen möchtest ? Ob dies per SQL möglich ist, bin ich überfragt. In Verbindung mit einer Programmiersprache geht's auf jeden Fall.
Gruß
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Re: Kalender
Hallo Peter,
Ich habe eine Tabelle, in die wird in unregelmäßigen Abständen etwas eingetragen, jeder Datensatz hat auch eine Spalte Datum.
Nun frage ich per MIN("Datum") und MAX("Datum") die Grenzen ab.
Das SQL-Statement soll mir jetzt eine Spalte mit allen existierenden Tagen in einer Spalte "alle_Tage" zwischen diesen zwei Grenzen liefern.
z.B.
MIN("Datum") =22.12.2011
MAX("Datum") = 01.01.2012
Ergebnis:
"alle_Tage"
22.12.2011
23.12.2011
24.12.2011
25.12.2011
26.12.2011
27.12.2011
28.12.2011
29.12.2011
30.12.2011
31.12.2011
01.01.2012
Grund: Man kann das Ergebnis z.B. als Auswahlliste eines Listenfeldes oder für weitere Berechnungen verwenden.
Habe ich diese Spalte, kann ich z.B. alle Montage mit abfragen.
Ich bin inzwischen schon weiter gekommen, das o.a. klappt, aber ich benötige dazu noch immer zwei Hilfstabellen.
1.) "03_Tage" in der alle Zahlen von 1 bis 31 als "N" aufgeführt sind.
2.) "04_Monate" in der alle Zahlen von 1-12 als "N" aufgeführt sind.
Die Abfrage sieht so aus:
Das muß doch einfacher/kürzer möglich sein?
Gruß Rik
Fast, keine Datensätze nur eine Abfrageliste per SQL.pmoegenb hat geschrieben:Kann es sein, dass Du automatisiert Datensätze mit einem Von und Bis Datum erzeugen möchtest ?
Ich habe eine Tabelle, in die wird in unregelmäßigen Abständen etwas eingetragen, jeder Datensatz hat auch eine Spalte Datum.
Nun frage ich per MIN("Datum") und MAX("Datum") die Grenzen ab.
Das SQL-Statement soll mir jetzt eine Spalte mit allen existierenden Tagen in einer Spalte "alle_Tage" zwischen diesen zwei Grenzen liefern.
z.B.
MIN("Datum") =22.12.2011
MAX("Datum") = 01.01.2012
Ergebnis:
"alle_Tage"
22.12.2011
23.12.2011
24.12.2011
25.12.2011
26.12.2011
27.12.2011
28.12.2011
29.12.2011
30.12.2011
31.12.2011
01.01.2012
Grund: Man kann das Ergebnis z.B. als Auswahlliste eines Listenfeldes oder für weitere Berechnungen verwenden.
Habe ich diese Spalte, kann ich z.B. alle Montage mit
Code: Alles auswählen
select "alle_Tage" as "alle_Montage" from "Tabelle" where dayofweak("alle_Tage")=2
Ich bin inzwischen schon weiter gekommen, das o.a. klappt, aber ich benötige dazu noch immer zwei Hilfstabellen.
1.) "03_Tage" in der alle Zahlen von 1 bis 31 als "N" aufgeführt sind.
2.) "04_Monate" in der alle Zahlen von 1-12 als "N" aufgeführt sind.
Die Abfrage sieht so aus:
Code: Alles auswählen
SELECT "Datum" FROM (SELECT DISTINCT CONVERT ( CONVERT ( YEAR( "Datum" ) || '-' || casewhen( "04_Monate"."N" < 10, '0' || "04_Monate"."N", CONVERT ( "04_Monate"."N" , "VARCHAR" ) ) || '-' || casewhen( "03_Tage"."N" < 10, '0' || "03_Tage"."N", CONVERT ( "03_Tage"."N" , "VARCHAR" ) ) , "TIMESTAMP" ) , "DATE" ) AS "Datum" FROM "Tabelle1", "04_Monate", "03_Tage") where DAYOFYEAR("Datum") and "Datum" >= (SELECT Min("Datum") FROM "Tabelle1") and "Datum" <= (SELECT Max("Datum") FROM "Tabelle1")
Gruß Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO