MySQL中經(jīng)常需要對字符串進行操作,比如將字符串進行分割并轉(zhuǎn)換成多行。下面我們就來看一下具體的實現(xiàn)方法。
首先,我們需要使用MySQL中內(nèi)置的函數(shù)SUBSTRING_INDEX()對字符串進行分割:
SELECT SUBSTRING_INDEX("apple,banana,orange,grape", ",", 1); -- 輸出結(jié)果為"apple" SELECT SUBSTRING_INDEX("apple,banana,orange,grape", ",", 2); -- 輸出結(jié)果為"apple,banana" SELECT SUBSTRING_INDEX("apple,banana,orange,grape", ",", 3); -- 輸出結(jié)果為"apple,banana,orange" SELECT SUBSTRING_INDEX("apple,banana,orange,grape", ",", -1); -- 輸出結(jié)果為"grape"
在上面的代碼中,我們將字符串"apple,banana,orange,grape"以","為分割符進行分割,分別獲取1、2、3、-1位置之前的子串。我們可以通過修改SUBSTRING_INDEX()函數(shù)的第二個參數(shù)來變更分割的位置。如果第二個參數(shù)為正數(shù),則表示從左往右第幾個分割位置之前的子串;如果為負數(shù),則表示從右往左第幾個分割位置之后的子串。
接下來,我們就可以利用上述方法對字符串進行分割并轉(zhuǎn)換成多行了:
SELECT SUBSTRING_INDEX("apple,banana,orange,grape", ",", 1) AS fruit_name UNION ALL SELECT SUBSTRING_INDEX(SUBSTRING_INDEX("apple,banana,orange,grape", ",", 2), ",", -1) AS fruit_name UNION ALL SELECT SUBSTRING_INDEX(SUBSTRING_INDEX("apple,banana,orange,grape", ",", 3), ",", -1) AS fruit_name UNION ALL SELECT SUBSTRING_INDEX("apple,banana,orange,grape", ",", -1) AS fruit_name;
在上面的代碼中,我們通過UNION ALL將四個子串合并到一起,并使用別名fruit_name統(tǒng)一列名。從代碼中我們可以看到,第二個UNION ALL的參數(shù)中使用了兩次SUBSTRING_INDEX()函數(shù),第一個SUBSTRING_INDEX()函數(shù)將原字符串以","為分割符分割成"apple,banana"兩個子串,第二個SUBSTRING_INDEX()函數(shù)再對第一個子串以","為分割符進行分割,獲取第二個子串"banana"。根據(jù)這樣的方法,我們就可以將字符串進行分割并轉(zhuǎn)換成多行了。