Vervang laatste substring (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Zie ook Functions (MySQL) & Grouping (MySQL).

Het probleem

Hoe fiets ik string

Aap, Noot, Mies

om naar

Aap, Noot & Mies

Aanvullende gegevens

Bron = grouping

Deze strings zijn de uitkomst van een grouping-operatie.

Scheidingsteken bekend

Ik weet altijd wat het scheidingsteken is, want dat bepaal ik zelf. Dat mag ook iets uniekers zijn, bv.

Aap_x_Noos_x_Mies

replace() werkt niet

Replace() vervangt alle occurences tegelijkertijd. Da's dus niet bruikbaar.

Oplossing #1

set @s = "Aap, Noot, Mies";
set @s_rechts = substring_index(@s,", ",-1);
set @s_links=left(@s,length(@s)-length(@s_rechts)-2);
select concat(@s_links," & ",@s_rechts);

Oplossing #2

set @s = "Aap, Noot, Mies";
select concat
(
   left(@s,length(@s)-length(substring_index(@s,", ",-1))-2),
   " & ",
    substring_index(@s,", ",-1)
);

Oplossing #3 - Functie

CREATE DEFINER=`root`@`localhost` FUNCTION `change_last_substring`
(
    input_string text,  
    separator_old tinytext, 
    separator_new tinytext
) 
RETURNS text CHARSET utf8

BEGIN

set @output_string=

trim
(
    leading separator_new from

    concat
    (
        left(input_string,length(input_string)-length(substring_index(input_string,separator_old,-1))-2),
        separator_new,
        substring_index(input_string,separator_old,-1)
    )

);

RETURN @output_string;

END

Bronnen