Trong MariaDB, SUBSTRING_INDEX()
là một hàm chuỗi được tích hợp sẵn. Nó trả về một chuỗi con từ một chuỗi trước một số lần xuất hiện nhất định của dấu phân cách được chỉ định.
SUBSTRING_INDEX()
yêu cầu ở ba đối số; chuỗi, dấu phân cách và số lượng (tức là số lần xuất hiện của dấu phân cách đó).
Cú pháp
Cú pháp như sau:
SUBSTRING_INDEX(str,delim,count)
Ở đâu str
là chuỗi, delim
là dấu phân cách và count
là số lần xuất hiện của dấu phân cách đó để sử dụng để xác định chuỗi con sẽ trả về.
Nếu count
là dương, mọi thứ ở bên trái của dấu phân cách cuối cùng (tính từ bên trái) đều được trả về. Nếu count
là số âm, mọi thứ ở bên phải của dấu phân cách cuối cùng (tính từ bên phải) đều được trả về.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3);
Kết quả:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3) | +-------------------------------------------------------+ | /users/homer | +-------------------------------------------------------+
Số lượng phủ định
Việc chỉ định một giá trị âm cho số lượng khiến nó được đếm ngược từ cuối chuỗi:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3);
Kết quả:
+--------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3) | +--------------------------------------------------------+ | homer/docs/cat_vids | +--------------------------------------------------------+
Không tìm thấy dấu phân cách
Nếu dấu phân tách không tồn tại trong chuỗi, toàn bộ chuỗi được trả về:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3);
Kết quả:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3) | +-------------------------------------------------------+ | /users/homer/docs/cat_vids | +-------------------------------------------------------+
Đối số rỗng
Nếu bất kỳ (hoặc tất cả) đối số null
, SUBSTRING_INDEX()
hàm trả về null
:
SELECT
SUBSTRING_INDEX(null, '/', 3) AS "1",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', null, 3) AS "2",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', null) AS "3",
SUBSTRING_INDEX(null, null, null) AS "4";
Kết quả:
+------+------+------+------+ | 1 | 2 | 3 | 4 | +------+------+------+------+ | NULL | NULL | NULL | NULL | +------+------+------+------+
Thiếu đối số
Gọi SUBSTRING_INDEX()
mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT SUBSTRING_INDEX();
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SUBSTRING_INDEX'