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