以数值形式拆分/分解mysql字符串

以数值形式拆分/分解mysql字符串,mysql,Mysql,我创建了一个(复杂)子查询,将结果放入变量中,如: @mylist := (select .... ) 返回的值是逗号分隔的字符串。。因为在子查询中我也使用concat(),所以该值是一个字符串 在同一SQL中,我希望在另一个子查询中使用此变量,如: where table.mycolumn IN (@mylist) 问题在于,由于@mylist是一个字符串,Mysql将查询读取为: where table.mycolumn IN('575030,655156,655157') 而我希望

我创建了一个(复杂)子查询,将结果放入变量中,如:

@mylist := (select .... ) 
返回的值是逗号分隔的字符串。。因为在子查询中我也使用concat(),所以该值是一个字符串

在同一SQL中,我希望在另一个子查询中使用此变量,如:

where table.mycolumn IN (@mylist)
问题在于,由于@mylist是一个字符串,Mysql将查询读取为:

where table.mycolumn IN('575030,655156,655157')
而我希望它被执行为

where table.mycolumn IN(575030,655156,655157)
如何将字符串转换为(数字)数组

PS:我正在使用mysql 5.1

您可以使用该函数(在您指定的mysql版本中)。它使用逗号作为分隔符拆分提供的字符串(在您的情况下存储在变量中),并返回指定值第一次出现的索引的索引(
0
,如果未找到)


无论@mylist中的分隔符是什么,这都有效吗?不,根据文档,没有参数可以更改分隔符。虽然可以添加
FIND_-IN_集(id,REPLACE(@mylist,'my_separator',','))
,但是如果要提取的值可以包含逗号,则无法工作。鉴于此限制,FIND_-IN_集中最好有。我不记得Oracle 11g是如何做到这一点的;使用WHERE FIND_IN_SET(id,@mylist)>0是否更好,因为如果没有找到匹配项,它将返回“0”?
0
的计算结果为false(),因此由于函数无法返回负值,
>0
是多余的。
/* building the list */
> SELECT @mylist :=GROUP_CONCAT(id SEPARATOR ',') FROM users WHERE id < 10;
+-----------------------------------------+
| @mylist:=group_concat(id separator ',') |
+-----------------------------------------+
| 0,2,3,4,5,6,7,8,9                       |
+-----------------------------------------+

> SELECT id, mail FROM users WHERE FIND_IN_SET(id, @mylist);
CREATE [TEMPORARY] TABLE IF NOT EXISTS tmp_users (
  "id" INT,
  PRIMARY KEY (id)
)

INSERT INTO tmp_users (...);