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