sql >> Databáze >  >> RDS >> Mysql

Jak mohu použít mySQL replace() k nahrazení řetězců ve více záznamech?

Na velmi obecné úrovni

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

Ve vašem případě říkáte, že tyto byly uniknuty, ale protože neuvádíte, jak byly uniknuty, řekněme, že byly uniknuty do GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

Protože váš dotaz bude ve skutečnosti fungovat uvnitř řetězce, vaše WHERE Je nepravděpodobné, že by klauzule, která by provedla porovnávání vzorů, zlepšila jakýkoli výkon - ve skutečnosti to bude generovat více práce pro server. Pokud nemáte jiný člen klauzule WHERE, který zlepší výkon tohoto dotazu, můžete jednoduše provést aktualizaci takto:

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

Můžete také vnořit více REPLACE hovory

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

Můžete to také udělat, když data vyberete (na rozdíl od toho, když je uložíte).

Takže místo :

SELECT MyURLString From MyTable

Mohl bys to udělat

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable



  1. co se stane ve fázi adopce, připravte

  2. MySql aktualizuje dvě tabulky najednou

  3. Zřetězit výsledky z dotazu SQL v Oracle

  4. Mohu použít PDO připravený příkaz k navázání identifikátoru (název tabulky nebo pole) nebo klíčového slova syntaxe?