Không có chức năng gốc nào cho việc này. Bạn có thể sử dụng hai hàm SUBSTRING_INDEX. Và bạn cần kiểm tra xem mục chỉ mục cụ thể đó có tồn tại hay không:
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)
trả về chuỗi con từ chuỗi@string
trước@n
lần xuất hiện của@delimiter
. -
SUBSTRING_INDEX( ... , @delimiter, -1)
trả lại mọi thứ về bên phải của dấu phân cách cuối cùng - bạn cần kiểm tra xem dấu phân cách
@n
tồn tại. Chúng tôi có thể rút bớt độ dài của chuỗi bằng dấu phân cách và chuỗi có dấu phân cách bị xóa - bằng cách sử dụngREPLACE(@string, @delimiter, '')
- và xem nó có lớn hơn@n*CHAR_LENGTH(@delimiter)-1
không