MySQL replace() - immer nur einmal? [gelöst]

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() - immer nur einmal? [gelöst]

Beitrag von xcomm » 05.08.2009 23:32:10

Hi Gemeinde,

ich möchte ein Stück Text aus einem größerem Text austauschen, allerdings nur immer das 1. Mal, wenn die Bedingung erfüllt ist, wie geht das?

Code: Alles auswählen

update foo set table1=replace(table1,"foo","bar") where table1 like "%foo%";
Danke, xcomm
Zuletzt geändert von xcomm am 06.08.2009 17:15:42, insgesamt 1-mal geändert.

dumpFunk
Beiträge: 47
Registriert: 31.01.2009 17:44:46

Re: MySQL replace() - immer nur einmal?

Beitrag von dumpFunk » 06.08.2009 09:54:26

Hallo,
allerdings nur immer das 1. Mal,
Wie meinst du das genau?
Das erste Mal im Text oder der erste Treffer der die Bedingung erfüllt..


viele Grüße

dumpfunk

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

Re: MySQL replace() - immer nur einmal?

Beitrag von xcomm » 06.08.2009 10:34:18

Hi Dumpfunk,

das erste Mal im Text in jeder Zeile/Row.

Code: Alles auswählen

text text
foo
text text
foo
->

Code: Alles auswählen

text text
bar
text text
foo
Danke, xcomm

dumpFunk
Beiträge: 47
Registriert: 31.01.2009 17:44:46

Re: MySQL replace() - immer nur einmal?

Beitrag von dumpFunk » 06.08.2009 10:47:25

Hi,

diese Lösung ist zwar nicht unbedingt rasend schnell, aber ich kenne keine bessere..

Code: Alles auswählen

select 
	concat(
		replace(
			substring(value,1,instr(value,'foo')+length('foo')),
			'foo','bar'
		),
		substring(value,length(substring(value,1,instr(value,'foo')+length('foo')))+1)
	)
from simple;
viele Grüße

dumpfunk

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

Re: MySQL replace() - immer nur einmal?

Beitrag von xcomm » 06.08.2009 11:35:26

Hallo Dumpfunk,

das schaut sich sehr gut an! Geschwindigkeit ist nicht so wichtig, da es um einmalige Änderungen geht.

Code: Alles auswählen

select
   concat(
      replace(
         substring(value,1,instr(value,'foo')+length('foo')-1),
         'foo','bar'
      ),
      substring(value,instr(value,'foo')+length('foo'))))
   )
from simple;
Ich werde nur etwas brauchen, bis ich es ganz verstanden habe. ;-)

Vielen Dank, xcomm

Antworten