在MySQL中,有時候需要將一個以分隔符為間隔的字符串轉換成列表,以便進行一些操作,比如在WHERE子句中進行篩選。這時候就可以使用MySQL的內置函數將字符串切割并轉換成列表。
SELECT SUBSTRING_INDEX('apple,banana,orange', ',', 1) AS item_1;
SELECT SUBSTRING_INDEX('apple,banana,orange', ',', 2) AS item_2;
SELECT SUBSTRING_INDEX('apple,banana,orange', ',', 3) AS item_3;
以上代碼會輸出以下結果:
+--------+
| item_1 |
+--------+
| apple |
+--------+
+--------+
| item_2 |
+--------+
| apple |
| banana |
+--------+
+--------+
| item_3 |
+--------+
| apple |
| banana |
| orange |
+--------+
其中,SUBSTRING_INDEX函數的三個參數分別是:
- 待處理的字符串
- 分隔符
- 要返回的列表項個數
注意,這里的分隔符可以是任意的字符串,比如空格、分號等。
對于更復雜的情況,我們也可以使用如下代碼來將一個字符串轉換成一個由多個值組成的列表:
SET @s = 'apple,banana,orange';
SET @n = LENGTH(@s) - LENGTH(REPLACE(@s, ',', '')) + 1;
SET @i = 1;
WHILE(@i <= @n) DO
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(@s, ','), ',', @i), ',', -1)) AS item_@i;
SET @i = @i + 1;
END WHILE;
以上代碼會輸出以下結果:
+--------+
| item_1 |
+--------+
| apple |
+--------+
+--------+
| item_2 |
+--------+
| banana |
+--------+
+--------+
| item_3 |
+--------+
| orange |
+--------+
這里用到了MySQL中的變量,@s代表待處理的字符串,@n代表列表項個數,@i代表當前處理的列表項編號。在while循環中,使用了SUBSTRING_INDEX函數和CONCAT函數將字符串切割成指定位置的子串,并用TRIM函數去除空格。最終,每個列表項的值都存儲在了以item_開頭的變量中。