Abfrage, ob Datum in der Zukunft liegt [SQL]

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Abfrage, ob Datum in der Zukunft liegt [SQL]

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

von sschultewolter » So, 08.06.2014 18:50

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.

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

von RobertG » So, 08.06.2014 18:30

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

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

von sschultewolter » So, 08.06.2014 18:20

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

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

von pmoegenb » So, 08.06.2014 18:05

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.

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

von sschultewolter » So, 08.06.2014 17:46

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'

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

von RobertG » So, 08.06.2014 17:35

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

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

von sschultewolter » Sa, 07.06.2014 02:38

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.

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

von RobertG » Fr, 06.06.2014 11:51

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

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

von pmoegenb » Fr, 06.06.2014 09:44

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)

Nach oben