it-swarm.com.de

Kann MySQL mehrere Zeichen ersetzen?

Ich versuche, eine Reihe von Zeichen in einem MySQL-Feld zu ersetzen. Ich kenne die REPLACE-Funktion, die jedoch jeweils nur eine Zeichenfolge ersetzt. Ich kann keine passenden Funktionen sehen im Handbuch .

Kann ich mehrere Zeichenfolgen gleichzeitig ersetzen oder löschen? Zum Beispiel muss ich Leerzeichen durch Bindestriche ersetzen und andere Satzzeichen entfernen.

49
DisgruntledGoat

Sie können REPLACE-Funktionen verketten:

select replace(replace('hello world','world','earth'),'hello','hi')

Dies wird hi earth.

Sie können sogar Unterabfragen verwenden, um mehrere Zeichenfolgen zu ersetzen!

select replace(london_english,'hello','hi') as warwickshire_english
from (
    select replace('hello world','world','earth') as london_english
) sub

Oder benutze einen JOIN, um sie zu ersetzen:

select group_concat(newword separator ' ')
from (
    select 'hello' as oldword
    union all
    select 'world'
) orig
inner join (
    select 'hello' as oldword, 'hi' as newword
    union all
    select 'world', 'earth'
) trans on orig.oldword = trans.oldword

Ich lasse die Übersetzung mit üblichen Tabellenausdrücken als Übung für den Leser;)

66
Andomar

Cascading ist die einzige einfache und unkomplizierte Lösung für die Ersetzung mehrerer Zeichen in MySQL.

UPDATE table1 
SET column1 = replace(replace(REPLACE(column1, '\r\n', ''), '<br />',''), '<\r>','')
8
Anurag

Ich habe lib_mysqludf_preg verwendet, um Folgendes zu ermöglichen:

Verwenden Sie reguläre PCRE-Ausdrücke direkt in MySQL

Wenn diese Bibliothek installiert ist, können Sie Folgendes tun:

SELECT preg_replace('/(\\.|com|www)/','','www.example.com');

Welches würde Ihnen geben:

example
4
billynoah

REPLACE ersetzt Zeichen oder Phrasen auf einfache Weise überall dort, wo sie in einer Zeichenfolge vorkommen. Bei der Bereinigung von Interpunktionszeichen müssen Sie möglicherweise nach Mustern suchen - z. eine Folge von Leerzeichen oder Zeichen an bestimmten Teilen des Textes, z. mitten in einem Wort oder nach einem Punkt. In diesem Fall wäre eine Ersetzungsfunktion für reguläre Ausdrücke viel leistungsfähiger. Die schlechte Nachricht ist MySQL stellt so etwas nicht zur Verfügung , aber die gute Nachricht ist, dass es möglich ist, eine Problemumgehung bereitzustellen - siehe dieser Blog-Beitrag .

Kann ich mehrere Zeichenfolgen gleichzeitig ersetzen oder löschen? Zum Beispiel muss ich Leerzeichen durch Bindestriche ersetzen und andere Satzzeichen entfernen.

Dies kann mit einer Kombination aus dem regulären Ausdrucksersetzer und der Standardfunktion REPLACE erreicht werden. Es kann in Aktion in diese Online-Rextester-Demo gesehen werden.

SQL (ohne den Funktionscode der Kürze halber):

SELECT txt,
       reg_replace(REPLACE(txt, ' ', '-'),
                   '[^a-zA-Z0-9-]+',
                   '',
                   TRUE,
                   0,
                   0
                   ) AS `reg_replaced`
FROM test;
1
Steve Chambers

auf php

$dataToReplace = [1 => 'one', 2 => 'two', 3 => 'three'];
$sqlReplace = '';
foreach ($dataToReplace as $key => $val) {
    $sqlReplace = 'REPLACE(' . ($sqlReplace ? $sqlReplace : 'replace_field') . ', "' . $key . '", "' . $val . '")';
}
echo $sqlReplace;

ergebnis

REPLACE(
    REPLACE(
        REPLACE(replace_field, "1", "one"),
    "2", "two"),
"3", "three");
1
asdasd