MySQL replace() with Column

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
xcomm
Beiträge: 804
Registriert: 21.09.2003 05:12:01
Wohnort: Europe
Kontaktdaten:

MySQL replace() with Column

Beitrag von xcomm » 10.03.2008 22:35:19

Hi Gemeinde,

ich möchte gern etwas text mit dem text und text aus einem table2.ANDERESFeld ersetzen.

Code: Alles auswählen

UPDATE table1, table2
SET table1.Feld = REPLACE(table1.Feld, "from string", "to $table.ANDERES_FELD string")
WHERE ...
Wie referenziert man bitte innerhalb einer Funktion auf den Inhalt eines anderen Feldes $ANDERES FELD - kann man das? ;-)

Danke,xcomm

Benutzeravatar
xcomm
Beiträge: 804
Registriert: 21.09.2003 05:12:01
Wohnort: Europe
Kontaktdaten:

Beitrag von xcomm » 11.03.2008 21:55:05

Hi Gemeinde,

vielleicht etwas verständlicher:

Code: Alles auswählen

 ... REPLACE(Feld, "STRING", ANDERES_FELD)...
tut

Allerdings bäuchte ich eine Concatenation aus STRING + ANDERES_FELD ala:

Code: Alles auswählen

 ... REPLACE(Feld, "STRING", "STRING" + ANDERES_FELD)...
Wie macht man sowas in MySQL `.` `+` `||` und die üblichen Verdächtigten gibt es wohl nicht - irgendwie mit CONCAT?


Danke, xcomm

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 11.03.2008 22:20:51

ich habe zwar keine Erfahrung mit MySQL, aber nach dem SQL Standard und dem was ich auf die Schnelle rechergiert habe, sollte das so funktionieren

Code: Alles auswählen

UPDATE table1 A
SET Feld = ( select REPLACE(A.Feld, "from string", CONCAT("to ", B.Feld)) from table2 B )
WHERE ....
Gruß
gms

Benutzeravatar
xcomm
Beiträge: 804
Registriert: 21.09.2003 05:12:01
Wohnort: Europe
Kontaktdaten:

Beitrag von xcomm » 11.03.2008 22:34:07

Hi gms,


Ich hatte es so in etwa probiert - aber immer Syntaxfehler geerntet.

Danke Dir!


Mein Workarround war nun der ANSI-Mode und damit || als Concatenation Operator gewesen :

Code: Alles auswählen

mysql> set @@sql_mode='ansi';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@sql_mode;
+-------------------------------------------------------------+
| @@sql_mode                                                  |
+-------------------------------------------------------------+
| REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI | 
+-------------------------------------------------------------+
1 row in set (0.00 sec)

feld=REPLACE(Feld, "STRING", "STRING" || ANDERES_FELD || "STING" )...

Vielen Dank, xcomm

Antworten