Mamy bazę danych, która ma kilka rekordów z pewnymi złymi danymi w jednej kolumnie, w której osadzony edytor uciekł przed niektórymi rzeczami, których nie powinien był uciec i zrywa wygenerowane linki.
Chcę uruchomić zapytanie, aby zamienić złe znaki we wszystkich rekordach, ale nie mogę dowiedzieć się, jak to zrobić. Znalazłem tę replace()
funkcję w MySQL, ale jak mogę jej użyć w zapytaniu?
Na przykład, jaka byłaby poprawna składnia, gdybym chciał zastąpić ciąg <
rzeczywistym nawiasem trójkątnym mniejszym niż kątowy ( <
) we wszystkich rekordach znajdujących się <
w articleItem
kolumnie? Czy można to zrobić za pomocą jednego zapytania (tj. Wybrać i zamienić wszystko za jednym zamachem), czy też muszę wykonywać wiele zapytań? Nawet jeśli jest to wiele zapytań, w jaki sposób mogę użyć replace()
do zastąpienia wartości pola w więcej niż jednym rekordzie?
Odpowiedzi:
Na bardzo ogólnym poziomie
W twoim przypadku mówisz, że uciekli, ale ponieważ nie określasz, w jaki sposób uciekli, powiedzmy, że uciekli do
GREATERTHAN
Ponieważ twoje zapytanie faktycznie będzie działało wewnątrz łańcucha,
WHERE
jest mało prawdopodobne, aby twoja klauzula dopasowująca wzorzec poprawiła jakąkolwiek wydajność - w rzeczywistości wygeneruje więcej pracy dla serwera. Jeśli nie masz innego członka klauzuli WHERE, który sprawi, że to zapytanie będzie działało lepiej, możesz po prostu wykonać aktualizację w następujący sposób:Możesz także zagnieżdżać wiele
REPLACE
połączeńMożesz to również zrobić po wybraniu danych (a nie podczas ich zapisywania).
Więc zamiast:
SELECT MyURLString From MyTable
Mógłbyś
SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable
źródło
źródło
<
s. Musisz użyć kodowania &, tak jak to:&
:)Sprawdź to
Np. Z przykładowym ciągiem znaków:
EG z nazwą kolumny / pola:
źródło
możesz napisać taką procedurę składowaną:
W ten sposób masz modułową kontrolę nad stołem.
Możesz również uogólnić procedurę składowaną, czyniąc ją parametryczną z parametrem wejściowym table do sanitoze
źródło
To ci pomoże.
Wynik:
źródło