Replace() (MySQL)
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:
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.