Seite 1 von 1

SQL-Syntax-Fehler....aber wo?

Verfasst: Do 13. Nov 2014, 16:07
von 4sb3st
Guten Tag Community,

ich lese mich langsam als Novice in die Datenbank- und SQL-Geschichten ein. Nun will ich das Alter eines Fahrers ermitteln, habe aber einen Syntax-Fehler in meiner SQL-Formel. Erkenne aber nicht wo. Wer kann mir den Fehler zeigen?

Code: Alles auswählen

SELECT "ID_FAHRER", "Nachname", "Geburtsdatum", 

CASEWHEN( 
		Month( "Geburtsdatum" ) > Month( CURDATE( ) ),
		DATEDIFF( 'year', "Geburtsdatum", CURDATE( ) ) - 1 
		CASEWHEN(
				Month("Geburtsdatum") = Month(CURDATE()) and DAY("Geburtsdatum") > DAY(CURDATE()),
				DATEDIFF( 'year', "Geburtsdatum", CURDATE( ) ) - 1,
				DATEDIFF( 'year', "Geburtsdatum", CURDATE( ) )
				)
		)AS "Alter" FROM "FAHRER"
Vielen Dank für Eure Hilfe

Re: SQL-Syntax-Fehler....aber wo?

Verfasst: Do 13. Nov 2014, 17:19
von RobertG
Hallo 4sb3st,

wenn Du umfangreichere SQL-Strukturen zusammensetzt: teste immer wieder aus, bis Du wirklich an die Fehlerquelle ran kommst.

Warum schachtelst Du ein CASEWHEN() in ein anderes CASEWHEN()? Schau Dir einfach einmal das handbuch an. Da steht genau das Altersproblem incl. der Lösung auch bei Schaltjehren drin. Versuche alternativ einmal, die Untergliederung heraus zu nehmen und eine Bedingung zu finden, bei der dann für das Alter ein Jahr abgezogen werden muss - beim rest nimmst Du dann den jahresunterschied zu dem jetzigen Datum.

Code: Alles auswählen

...
(MONTH("Geburtsdatum") > MONTH(CURDATE())) OR
((MONTH("Geburtsdatum") = MONTH(CURDATE())) AND (DAY("Geburtsdatum") >
DAY(CURDATE()))) ,
...
Damit vermeidest Du die Untergleiderung.

Gruß

Robert

Re: SQL-Syntax-Fehler....aber wo?

Verfasst: Do 13. Nov 2014, 17:32
von 4sb3st
Danke RobertG!

Ich habe es im Handbuch iwie überlesen. Nun hab ich es gefunden (Stichwort: Stichwortverzeichnis... ist schon ne feine Sache :roll: ). Vielen Dank!