SQL ersetzen aber mit Platzhaltern

hoseonline

Neuer Benutzer
Beiträge
2
Hallo,

ich bekomme leider keine entsprechende replace Abfrage hin.

Ich habe eine Produktbeschreibung und möchte das Wort "Form" gegen "Modell" tauschen, also eigentlich ganz easy. Nur: Das Wort Form taucht teilweise noch öfters in der Beschreibung im reinen Fließtext bzw. als Auflistungspunkt auf.

Da das Form, welches ich ersetzen möchte immer so ausschaut: Form Melanie hat....
kann ich die entsprechenden Einträge aus der Datenbank leicht auslesen:

SELECT * FROM `s_articles` WHERE `description_long` LIKE '%Form % hat%'

Das klappt auch.

Nur wie bekomme ich das Form in Verbindung mit einem Platzhalter (das zweite Wort nach Form und dem anschließenden hat) nun ersetzt, das klappt nicht wirklich.

Idee war bishher:
UPDATE s_articles SET `description_long` = REPLACE(`description_long`,'%Form % hat%','%Modell % hat%');

Das funktioniert nicht, da man die Platzhalter % ja im replace nicht benutzen kann. In der Doku habe ich auch nichts weiter gefunden.

Hat jemand eine Idee??
 
Werbung:
regexp_replace() wäre die Lösung - wenn MySQL es könnte. So wirst das wohl via PHP oder so machen müssen. Und dabei schön die Entscheidung für MySQL bereuen ...
 
Erstmal wirst du mit
WHERE `description_long` LIKE '%Form % hat%'
nicht nur bei
Form Melanie hat
eine Übereinstimmung haben, sondern auch bei bei
Form Melanie hat dies und das und Modell Franz hat

Wenn du jetzt also mit replace hierangehen würdest könnte nur ein Teil des Ausdrucks ersetzt werden oder eben der ganze Ausdruck. Daher ist % als Platzhalter äußerst ungeeignet.

Kannst du dein String nicht vieleicht weiter aufteilen? Wenn z.B. dein gesuchtes Wort immer nur im ersten Satz steht dann ginge:
Code:
DECLARE   @string VARCHAR(1000)
SET     @string = 'Toller Text Form Melanie hat irgendwas. Form Melanie hat außerdem noch mehr.'

SELECT   replace(left(@string,charindex('.',@string)),'Form','Modell') +
     right(@string,len(@string)-charindex('.',@string))
(MSSQL, kann aber auch MySQL mit entsprechenden Funktionen)
 
Erstmal wirst du mit
WHERE `description_long` LIKE '%Form % hat%'
nicht nur bei
Form Melanie hat
eine Übereinstimmung haben, sondern auch bei bei
Form Melanie hat dies und das und Modell Franz hat

Das ist richtig, ich möchte auch alle "Form Melanie hat..." "Form [wasauchimmer] hat..."

Die Beschreibungen fangen immer gleich an.

Hier mal ein Beispielbeschreibung bis zum Teil mit der Form:

Form: 5077, Artikel: 0386, Farbnr.: D801

Farbe: darkblue washed Jeans dunkelblau angewaschen

Form Melanie hat eine hohe Leibhöhe und einen bequemen Oberschenkel. Der Beinverlauf ist schmaler werdend. Fußweitenum..............

Ich kann also nicht gucken, welches Zeichen davor kommt, denn das kann ja jedes sein, mal eine Zahl, mal ein Buchstabe.
Zum anderen kann es sein, dass es auch "Form Melanie Pipe hat..." heisst.

Glaube langsam, dass man das gar nicht hinbekommt :(
 
Werbung:
Mit regexp in jedem Fall, mit MySQL geht es auch, ist aber sehr mühselig. Du musst ein Muster finden und dich durch den Text zur passenden Stelle hangeln.
Code:
DECLARE    @string VARCHAR(1000),
        @stringl VARCHAR(1000),
        @stringr VARCHAR(1000)
SET        @string = 'Form: 5077, Artikel: 0386, Farbnr.: D801

Farbe: darkblue washed Jeans dunkelblau angewaschen

Form Melanie hat eine hohe Leibhöhe und einen bequemen Oberschenkel. Der Beinverlauf ist schmaler werdend. Fußweitenum..............'

SELECT    right(@string,len(@string)-patindex('%Farbe:%',@string))
SET        @stringl =    left(@string,patindex('%Farbe:%',@string)+
                    charindex(CHAR(10),right(@string,len(@string)-patindex('%Farbe:%',@string)))+2)
SET        @stringr =    right(@string,len(@string)-patindex('%Farbe:%',@string)-
                    charindex(CHAR(10),right(@string,len(@string)-patindex('%Farbe:%',@string)))-2)
SELECT    @stringl + replace(left(@stringr,charindex('.',@stringr)),'Form','Modell') +
        right(@stringr,len(@stringr)-charindex('.',@stringr))
Form: 5077, Artikel: 0386, Farbnr.: D801

Farbe: darkblue washed Jeans dunkelblau angewaschen

Modell Melanie hat eine hohe Leibhöhe und einen bequemen Oberschenkel. Der Beinverlauf ist schmaler werdend. Fußweitenum..............
 
Zurück
Oben