gelöst: Probleme mit UPDATE col SET ...

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

heinz_ketchup
****
Beiträge: 111
Registriert: So, 07.10.2007 16:05
Wohnort: München

gelöst: Probleme mit UPDATE col SET ...

Beitrag von heinz_ketchup »

Hallo liebe Helfenden,

ich versuche gerade in MySQL die Spalteninhalte 'sim_zahl_datum' meiner Tabelle 'simulation' per UPDATE ... SET Befehl zu ändern. Leider mache ich etwas falsch und bekomme immer die übliche Fehlermeldung "You have an error in your SQL syntax; check the manual ..."

Ich habe folgende Problemstellung. In der Spalte 'sim_zahl_datum' stehen unterschiedliche Datumswerte für Zahlungen. Ich möchte nun all die Datumswerte ändern, die auf einen Samstag oder Sonntag fallen, so dass der darauf folgende Montag als Zahlungstag ausgewiesen wird. Mein SQL-Statement sieht so aus:

Code: Alles auswählen


UPDATE simulation
 
SET
	IF(
	DAYNAME(sim_zahl_datum) = 'Saturday', 
	sim_zahl_datum + INTERVAL 2 DAY, 
	IF(
	DAYNAME(sim_zahl_datum) = 'Sunday', 
	sim_zahl_datum + INTERVAL 1 DAY,
	sim_zahl_datum)
	
Der Feldtyp in der Tabelle 'simulation' ist als DATE deklariert. Vielleicht sieht ja jemand meinen Denk- oder Syntax-Fehler.
Vielen Dank für die Hilfe.

VG Werner
Zuletzt geändert von heinz_ketchup am Mo, 16.02.2015 10:38, insgesamt 1-mal geändert.
------------------------------------------------------------
LibreOffice 3.5.4.2 auf Mac OS X 10.10.1 und MySQL 5.5
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Probleme mit UPDATE col SET ...

Beitrag von RobertG »

Hallo Werner,

ohne überhaupt den Code auf Korrektheit mit NySQL zu überprüfen: Zumindest fehlt in dem, was Du hier angegeben hast, eine schließende Klammer.
Dann habe ich mir den Code angesehen und mit MySQL verglichen. Meines Wissens kannst Du so keine Datumsumrechnung machen. Ich würde das folgendermaßen zu lösen versuchen:

Code: Alles auswählen

UPDATE simulation 
SET sim_zahl_datum =
CASE 
WHEN DAYNAME(sim_zahl_datum) = 'Saturday' THEN DATE_ADD(sim_zahl_datum, INTERVAL 2 DAY)
WHEN DAYNAME(sim_zahl_datum) = 'Sunday' THEN DATE_ADD(sim_zahl_datum, INTERVAL 1 DAY)
ELSE sim_zahl_datum
END
Gruß

Robert
heinz_ketchup
****
Beiträge: 111
Registriert: So, 07.10.2007 16:05
Wohnort: München

gelöst: Probleme mit UPDATE col SET ...

Beitrag von heinz_ketchup »

Hallo Robert,

vielen Dank!

Du hast natürlich recht, zwei IF Bedingungen = 2 Klammern zum Schluss.
Aber daran lag's nicht. Die Funktion der Wahl lautet DATE_ADD() und CASE WHEN ist auch etwas eleganter und übersichtlicher.
Jetzt klappt die Datumsänderung wie gewünscht.

Nochmals Danke und schöne Grüße
Werner
------------------------------------------------------------
LibreOffice 3.5.4.2 auf Mac OS X 10.10.1 und MySQL 5.5
Antworten