gpt4 book ai didi

MySql 字符串操作,从文本中选择项目

转载 作者:行者123 更新时间:2023-11-29 03:44:32 25 4
gpt4 key购买 nike

我有一个“变更集”表,其中有一个注释列,人们可以在其中以“已修复问题 #2345 - ......”的格式输入对错误问题的引用,但也可以是“已修复问题 #456,# 2956,#12345……”选择这些引用编号的最佳方式是什么,以便我可以通过连接访问这些问题。

鉴于此更改集表

id     comments
===========================
1 fixed issue #234 ....
2 DES - #789, #7895, #123
3 closed ticket #129

我想要这样的结果

changeset_id issue_id
=====================
1 234
2 789
2 7895
2 123
3 129

我使用了 substring_index(substring_index('#',-1),' ',1) 类型构造,但每行只会返回一个引用。

也在寻找进行这种文本查找的最有效方法

感谢任何帮助

谢谢

最佳答案

这是关于如何获得所需数据集的一种(臃肿/困惑)方法......

第 1 步 - 找出问题 ID 的最大数量

SELECT MAX(LENGTH(comments)- LENGTH(REPLACE(comments,'#',''))) AS max_issues 
FROM change_sets

第 2 步 - 递归地创建一个 UNION 查询,其“级别”数量等于问题 ID 的最大数量。对于您的示例,

SELECT changeset_id, issue_id  FROM
(
SELECT id AS changeset_id, CAST(SUBSTRING_INDEX(comments,'#',-1) AS UNSIGNED) AS issue_id FROM change_sets
UNION
SELECT id AS changeset_id, CAST(SUBSTRING_INDEX(comments,'#',-2) AS UNSIGNED) AS issue_id FROM change_sets
UNION
SELECT id AS changeset_id, CAST(SUBSTRING_INDEX(comments,'#',-3) AS UNSIGNED) AS issue_id FROM change_sets
) a
HAVING issue_id!=0
ORDER BY changeset_id, issue_id

我正在利用 UNION 删除重复行的能力,以及 CAST 在确定整数时使用前导数值的能力。

使用您的玩具数据集的结果:

+--------------+----------+
| changeset_id | issue_id |
+--------------+----------+
| 1 | 234 |
| 2 | 123 |
| 2 | 789 |
| 2 | 7895 |
| 3 | 129 |
+--------------+----------+

关于MySql 字符串操作,从文本中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001011/

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