Abfrage, ob Datum in der Zukunft liegt [SQL]

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von pmoegenb »

stefan88888 hat geschrieben:

Code: Alles auswählen

SELECT 'kunden'.*, 'kunden'.'VOLLWARTUNG', 'kunden'.'VOLLWARTUNG_ENDE' FROM 'mysql'.'kunden' AS 'kunden' WHERE 'VOLLWARTUNG' = 1 AND 'VOLLWARTUNG_ENDE' > CURDATE( ) + 30
Probiere es mal so:

Code: Alles auswählen

SELECT * FROM "mysql"."kunden" AS "kunden" WHERE "VOLLWARTUNG" = 1 AND "VOLLWARTUNG_ENDE" > (CURRENT_DATE() + 30)
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von RobertG »

Hallo *,

das wird so nicht funktionieren: CURDATE() ist ein Datum, '30' eine Zahl. Was soll zum Datum addiert werden? Tage, Monate, Jahre ...

Mit der Anweisung

Code: Alles auswählen

WHERE DATEDIFF('dd',"Datum",CURDATE())>30
wird der Unterschied in Tagen berechnet und berücksichtigt

Gruß

Robert
sschultewolter
*
Beiträge: 18
Registriert: Mi, 24.10.2012 19:03

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von sschultewolter »

Hallo Robert, ja 30 ist eine Zahl ;) Das sollen Tage sein.

Ich hab da noch etwas mit dem UNIX Zeitsstempel im Kopf gehabt. Denn hinter jedem Datum steht auch eine einfache Intergerzahl.

Ich werde das sofort ausprobieren! Danke schonmal.
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von RobertG »

Hallo sschultewolter,

der UNIX-Zeitstempel rechnet aber die Sekunden seit dem 1. Januar 1970 00:00:00 Uhr. Wenn Du da also 30 addierst, dann wärst Du gerade einmal eine halbe Minute voran gekommen. Die Datenbank arbeitet daher mit Funktionen, die entsprechend direkten Zugriff auf Minuten, Stunden, Tage, Monate und Jahre erlauben.

Gruß

Robert
sschultewolter
*
Beiträge: 18
Registriert: Mi, 24.10.2012 19:03

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von sschultewolter »

Code: Alles auswählen

SELECT "kunden".*, "kunden`.`VOLLWARTUNG", "kunden"."VOLLWARTUNG_ENDE" 
FROM "xy"."kunden" AS "kunden" 
WHERE "VOLLWARTUNG" = 1 AND DATEDIFF('dd',CURDATE(), "WARTUNG_ENDE" ) < 30
Was ist hier falsch? Bekomme die Fehlermeldung, "Incorrect parameter count in the call to native function 'DATEDIFF'
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von pmoegenb »

sschultewolter hat geschrieben:SELECT "kunden".*, "kunden"."VOLLWARTUNG", "kunden"."VOLLWARTUNG_ENDE"
FROM "xy"."kunden" AS "kunden"
WHERE "VOLLWARTUNG" = 1 AND DATEDIFF('dd',CURDATE(), "WARTUNG_ENDE" ) < 30
RobertG hat geschrieben:

Code: Alles auswählen

DATEDIFF('dd',"Datum",CURDATE())>30
Außerdem selektierst Du Spalten mehrfach.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
sschultewolter
*
Beiträge: 18
Registriert: Mi, 24.10.2012 19:03

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von sschultewolter »

Die Mehrfachselektierung hab ich rausgenommen. Das mit dem DATEDIFF geht immer noch nicht.

In der Testdatenbank, welche mit einer eingebetten DB arbeitet, geht es. Mit der Version, die ihre Daten von einer externen Datenbank(MySQL) bekommt, geht es nicht.

Code: Alles auswählen

SELECT `VOLLWARTUNG`, `VOLLWARTUNG_ENDE` FROM `xy`.`kunden` AS `kunden` WHERE DATEDIFF( 'dd', `VOLLWARTUNG_ENDE`, CURDATE( ) ) > 30
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von RobertG »

Hallo sschultewolter,
sschultewolter hat geschrieben:

Code: Alles auswählen

SELECT "kunden".*, "kunden`.`VOLLWARTUNG", "kunden"."VOLLWARTUNG_ENDE" 
FROM "xy"."kunden" AS "kunden" 
WHERE "VOLLWARTUNG" = 1 AND DATEDIFF('dd',CURDATE(), "WARTUNG_ENDE" ) < 30
Was ist hier falsch? Bekomme die Fehlermeldung, "Incorrect parameter count in the call to native function 'DATEDIFF'
Die Anzahl der Parameter zu dem Befehl DATEDIFF soll angeblich nicht korrekt sein.
Mit welcher Datenbanbk arbeitest Du? Mit der internen HSQLDB? Die gesetzten Parameter scheinen von der Ansicht her korrekt zu sein. 'dd' für Tage, CURDATE() für das aktuelle Datum und "Wartung_Ende" für ein zweites Datum.
Ich sehe
FROM "xy"."kunden"
und werfe noch einmal einen Blick auf das erste Posting - da steht etwas von MySQL.
DATEDIFF in MySQL hat nur zwei Parameter und liest grundsätzlich nur den Unterschied in Tagen aus - das würde die Fehlermeldung "Falsche Parameteranzahl" erklären. Also nur die Angaben
DATEDIFF(CURDATE(), "WARTUNG_ENDE")
ergeben unter MySQL den Tagesunterschied. Gegebenenfalls noch die Datumsfolge ändern.

Vor dem Hintergrund MySQL stimmt dann auch die Formulierung CURDATE()+1 ist Morgen - nur hat MySQl da ein bisschen Probleme mit der Anzeige als Datum. Die erfolgt ohne Bindestriche.

Gruß

Robert
sschultewolter
*
Beiträge: 18
Registriert: Mi, 24.10.2012 19:03

Re: Abfrage, ob Datum in der Zukunft liegt [SQL]

Beitrag von sschultewolter »

Hallo Robert,

danke, das hat geholfen. Mit dem Datum habe ich keinerlei Probleme. Kann mir nun wunderbar ausgeben lassen, welche Vollwartungen bereits abgelaufen und welche in den nächsten 30 Tagen ablaufen.
Antworten