Mysql 裡面並沒有內建 split 函數,因此我們可以利用其他函數(function)拼湊出我們要的功能。底下是國外網友寫的方式,有一個缺點,無法正確用在中文字串上:
CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),delim, '');
問題就出在 LENGTH 函數上,因為1個中文字等於3個字元,這樣子取字串就會出現位置不正確了,所以我們要改用 CHAR_LENGTH 就可以了。
CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),delim, '');
使用的時候:
若字串是:”我要學-中文-英文-數學”,想要以 “-” 分割字串,取第二個字串 “中文”,方式如下
SELECT SPLIT_STR("我要學-中文-英文-數學", "-", 2) from TABLE