首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分/爆炸mysql字符串的数值

问拆分/爆炸mysql字符串的数值
EN

Stack Overflow用户
提问于 2016-10-12 08:59:05
回答 1查看 611关注 0票数 4

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

代码语言:javascript
复制
@mylist := (select .... ) 

返回的值是一个逗号删除的字符串。因为在子查询中,我还使用了concat(),所以值是一个字符串。

在相同的SQL中,我希望在另一个子查询中使用这个变量,如下所示:

代码语言:javascript
复制
where table.mycolumn IN (@mylist)

问题在于,因为@mylist是一个字符串,Mysql将查询读入如下:

代码语言:javascript
复制
where table.mycolumn IN('575030,655156,655157')

而我希望它被执行为

代码语言:javascript
复制
where table.mycolumn IN(575030,655156,655157)

如何将字符串转换为(数字)数组?

PS:我正在使用mysql 5.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 09:34:12

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

代码语言:javascript
复制
/* 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);

自动浇铸足以自动管理原始类型和最终字符串之间的比较,大多数情况下都是这样。

更新

尽管它回答了您的问题,但在寻找大量ids时,建议的解决方案可能会变得缓慢。更好的解决方案是放弃使用变量并将结果存储在临时表中。

代码语言:javascript
复制
CREATE [TEMPORARY] TABLE IF NOT EXISTS tmp_users (
  "id" INT,
  PRIMARY KEY (id)
)

INSERT INTO tmp_users (...);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39994516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档