SUBSTRING INDEX (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 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