Det finns ingen inbyggd funktion för detta. Du kan använda två SUBSTRING_INDEX-funktioner. Och du måste kontrollera om det specifika indexobjektet finns:
SET @string:='1,2,3,4,5';
SET @delimiter:=',';
SET @n:=6;
SELECT
CASE WHEN
CHAR_LENGTH(@string)-CHAR_LENGTH(REPLACE(@string, @delimiter, ''))>=
@n*CHAR_LENGTH(@delimiter)-1
THEN
SUBSTRING_INDEX(SUBSTRING_INDEX(@string, @delimiter, @n), @delimiter, -1)
END;
SUBSTRING_INDEX(@string, @delimiter, @n)
returnerar delsträngen från strängen@string
före@n
förekomster av@delimiter
.SUBSTRING_INDEX( ... , @delimiter, -1)
returnerar allt till höger om den slutliga avgränsaren- du måste kontrollera om avgränsare
@n
existerar. Vi kan subtrahera längden på strängen med avgränsaren och strängen med avgränsaren borttagen - medREPLACE(@string, @delimiter, '')
- och se om den är större än@n*CHAR_LENGTH(@delimiter)-1