Replace() (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

De functie replace() vervangt tekenreeksen.

Syntaxis

replace(bron, van, naar)

Bv.:

select replace ("foobar","foo","boo")
boobar

Bv.:

update tbl_root set naamnl05gs = replace(naamnl05gs,'-set','s')

Elke substring matchet

Wat je in het voorbeeld select replace("Foobar", "Foo", "Boo") kunt zien: De bron-string kan een substring zijn. Oftewel: Je hebt al een match als de bron-string onderdeel is van iets langers.

Ik geloof dat je dat niet zomaar kunt aanpassen. Voor trucks met wildcards en/of reguliere expressies, heb je mogelijk externe tools nodig. Denk aan:

  • Dynamische SQL in een sproc
  • Via PHP of WP-CLI
  • Export - sed - import [1]
  • Overig [2],[3].

Voorbeeld van een oplossing om alleen exact match te hebben - Dit betreft SQL die in een Bash script samengesteld is, en geëxecuteerd wordt via WordPress' WP-CLI:

update
   wp_posts
set
   title=replace(title, "mx", "Flag Mexico")
where
   title="mx"

Null-waardes & select queries

NULL-waardes in een select query vervangen door iets handigers:

select ifnull ("hoihallo","leeg!");   -- Output: "hoihallo", want input-argument niet-null en wordt daarom geretourneerd
select ifnull (null,"leeg!");         -- Output: "leeg!", want input-argument is null en dan wordt het tweede argument geretourneerd

Null-waardes & exportbestanden

Bij exports naar bestanden worden null-waardes meestal \N en daar kan ik zo weinig mee

select replace(gewicht,isnull,"niet nul") from tbl_sjabloon -- Foutmelding: isnull werkt niet in deze situatie
select replace(gewicht,null,"niet nul") from tbl_sjabloon --  Vult alles met null-waardes
select replace(ifnull(gewicht,),'\n',"niet nul") from tbl_sjabloon -- Werkt!

De laatste variant werkt: null-waardes zijn nu verdwenen, maar er verschijnen ook geen nieuwe waardes - Sois. Probleem opgelost.

Alle occurences worden vervangen

Bv.:

select replace("foo foo foo foobar","foo","boo");

boo boo boo boobar

Wil je iets specifieker, dan is substring_index misschien geschikter: SUBSTRING INDEX (MySQL)

Een streepje is niet altijd een streepje

Er zijn verschillende soorten verbindingsstreepjes. Belangrijk om rekening mee te houden.

Zie ook

Bronnen