gpt4 book ai didi

mysql - 以数值拆分/分解 mysql 字符串

转载 作者:可可西里 更新时间:2023-11-01 07:34:17 25 4
gpt4 key购买 nike

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

@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

最佳答案

您可以使用函数 FIND_IN_SET (it is available 在您指定的 mysql 版本中)。它使用逗号作为分隔符拆分提供的字符串(在您的情况下存储在变量中)并返回指定值第一次出现的索引的索引(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);

在大多数情况下,自动转换足以自动管理原始类型和最终字符串之间的比较。


更新

虽然它回答了您的问题,但在查找大量 ID 时,建议的解决方案可能会变慢。一种更好的解决方案是放弃使用变量并将结果存储在临时表中

CREATE [TEMPORARY] TABLE IF NOT EXISTS tmp_users (
"id" INT,
PRIMARY KEY (id)
)

INSERT INTO tmp_users (...);

关于mysql - 以数值拆分/分解 mysql 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com