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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *