mysql字符串转数组
时间: 2023-09-07 18:16:37 浏览: 320
要将MySQL中的字符串转换为数组,你可以使用MySQL的内置函数`FIND_IN_SET()`和`SUBSTRING_INDEX()`来实现。下面是一个示例:
```sql
SET @str = 'apple,banana,orange';
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@str, ',', numbers.n), ',', -1) AS item
FROM (
SELECT (a + b * 10 + 1) n
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t
CROSS JOIN (SELECT 0 AS b UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t2
ORDER BY n
) numbers
WHERE n <= (LENGTH(@str)
相关问题
MySQL字符串转数组
要在MySQL中实现字符串转数组的功能,可以使用以下存储过程:
```
drop table if exists list;
create temporary table list(id INT not null);
drop PROCEDURE if exists strings_to_array;
create PROCEDURE strings_to_array(s_str varchar(128), s_split varchar(3))
begin
set @i = length(s_str) - length(replace(s_str,s_split,'')); -- 算出分隔符的总数
set @left_str = s_str;
while @i > 0 -- 有多少个分隔符就循环多少遍
do
set @sub_str = substr(@left_str,1,instr(@left_str,s_split)-1); -- 得到分隔符前面的字符串
set @left_str = substr(@left_str,length(@sub_str) + length(s_split) + 1); -- 得到分隔符后面的字符串
set @n = trim(@sub_str);
insert into list(id) values(@n);
set @i = @i - 1;
end while;
set @n = trim(@left_str);
insert into list(id) values(@n);
end;
CALL strings_to_array('0,1,2,29,7,9,14',',');
select * from list;
DROP TEMPORARY TABLE IF EXISTS list;
```
这个存储过程首先会创建一个临时表`list`来存储拆分后的数组。然后使用`while`循环来逐步拆分字符串并插入到临时表中。最后,从临时表中选择数据并返回。
请注意,这段代码需要在MySQL数据库中执行,并且需要提前创建一个存储过程。并且你需要根据自己的实际情况调整字符串和分隔符的参数。
mysql 字符串转数组
中可以通过自定义存储过程来实现字符串转数组的功能。下面是一个示例存储过程,可以将一个以指定分隔符分隔的字符串转换为数组:
```mysql
DROP TABLE IF EXISTS list;
CREATE TEMPORARY TABLE list(id INT NOT NULL);
DROP PROCEDURE IF EXISTS strings_to_array;
CREATE PROCEDURE strings_to_array(s_str VARCHAR(128), s_split VARCHAR(3))
BEGIN
SET @i = LENGTH(s_str) - LENGTH(REPLACE(s_str, s_split, '')); -- 算出分隔符的总数
SET @left_str = s_str;
WHILE @i > 0 -- 有多少个分隔符就循环多少遍
DO
SET @sub_str = SUBSTR(@left_str, 1, INSTR(@left_str, s_split) - 1); -- 得到分隔符前面的字符串
SET @left_str = SUBSTR(@left_str, LENGTH(@sub_str) + LENGTH(s_split) + 1); -- 得到分隔符后面的字符串
SET @n = TRIM(@sub_str);
INSERT INTO list(id) VALUES(@n);
SET @i = @i - 1;
END WHILE;
SET @n = TRIM(@left_str);
INSERT INTO list(id) VALUES(@n);
END;
CALL strings_to_array('0,1,2,29,7,9,14', ',');
SELECT * FROM list;
DROP TEMPORARY TABLE IF EXISTS list;
```
上述存储过程中,`strings_to_array`过程接收两个参数:`s_str`表示要转换的字符串,`s_split`表示分隔符。该过程首先计算出分隔符的总数,然后通过循环将字符串分割成多个子字符串,并将每个子字符串插入到一个临时表中。最后,查询临时表即可得到转换后的数组。
阅读全文