Vervang laatste substring (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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))-1), # last "-1": Maybe needs to be "-2" sometimes?
        separator_new,
        substring_index(input_string,separator_old,-1)
    )

);

RETURN @output_string;

END

Bronnen