Der er ingen native funktion til dette. Du kan bruge to SUBSTRING_INDEX-funktioner. Og du skal kontrollere, om det specifikke indekselement findes:
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)
returnerer understrengen fra streng@string
før@n
forekomster af@delimiter
.SUBSTRING_INDEX( ... , @delimiter, -1)
returnerer alt til højre for den endelige afgrænsning- du skal kontrollere, om afgrænser
@n
eksisterer. Vi kan trække længden af strengen med afgrænsningstegnet, og strengen med afgrænsningstegnet fjernet - ved hjælp afREPLACE(@string, @delimiter, '')
- og se om den er større end@n*CHAR_LENGTH(@delimiter)-1