SUBSTRING INDEX (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Zie ook Strings manipuleren (MySQL)

Basis

substring_index retourneert een deel van de gegeven string, tot aan een bepaalde substring:

select substring_index("wie weet waar willem wever woont","wever",1);

Uitvoer:

wie weet waar willem

Voorbeeld: Parameter afsnoepen

select substring_index("12x34x56","x",2); -- Uitvoer: 12x34

Overige voorbeelden

select substring_index("wie weet waar willem wever woont","w",1); 
(lege string - geen NULL)
select substring_index("wie weet waar willem wever woont","w",2); 
wie
select substring_index("wie weet waar willem wever woont","w",3);
wie weet
select substring_index("wie weet waar willem wever woont","w",-1); 
oont
select substring_index("wie weet waar willem wever woont","w"); 
Error Code: 1582. Incorrect parameter count in the call to native function 'substring_index'

Begin van een string verwijderen?

Dit is wat lastiger: Ik heb een verzameling van string van onderstaand format + beoogd eindresultaat:

abc_def_ghi → def_ghi
def_ghi     → ghi

Dus het gedeelte tot de eerste "_" moet weggelaten worden

Ik kan niet

substring_index(invoer,"_",-2)

gebruiken, omdat er soms één "_" is, en soms twee.

Wellicht kan het eenvoudiger, maar dit werkt in ieder geval (mogelijk moet rechterhaakje na 'right' op dezelfde regel):

right
(
  invoer,
  length(invoer)-length(substring_index(invoer,"_",1))-1
)

Laatste komma door "&" vervangen

Dit is iets wat ik regelmatig tegenkom. Dus dat een reeks zoals

a, b, c, d, e

wordt vervangen door

a, b, c, d & e

Hiervoor gebruik ik een functie:

CREATE DEFINER=`root`@`localhost` FUNCTION `replace_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),
        separator_new,
        substring_index(input_string,separator_old,-1)
    )

);

RETURN @output_string;

END

Zie ook

Bronnen