gpt4 book ai didi

mysql - SQL:通过掩码从表中选择唯一的子字符串

转载 作者:行者123 更新时间:2023-11-29 07:46:54 25 4
gpt4 key购买 nike

有一个 SQL 表 mytable,其中有一列 mycolumn。该列的每个单元格内都有文本。每个单元格都可以包含“this.text/31/”或“this.text/72/”子字符串(子字符串中的数字可以是任意)作为字符串的一部分。

应该执行什么 SQL 查询来显示唯一此类子字符串的列表?

附注当然,某些单元格可能包含多个这样的子串。

以下是评论中问题的解答:该查询应该在 SQL Server 上运行。首选输出应包含整个子字符串,而不仅仅是数字部分。它实际上可能不仅仅是第一个“/”和第二个“/”之间的数字。

而且它是 varchar 类型(可能)

示例:mycolumn 包含这样的值:

abcd/eftthis.text/31/sadflh adslkjh
abcd/eftthis.text/44/khjgb ljgnkhj this.text/447/lhkjgnkjh
ljgkhjgadsvlkgnl
uygouyg/this.text/31/luinluinlugnthis.text/31/ouygnouyg
khjgbkjyghbk

查询应显示:

this.text/31/
this.text/44/
this.text/447/

最佳答案

如何使用递归 CTE:

CREATE TABLE #myTable
(
myColumn VARCHAR(100)
)

INSERT INTO #myTable
VALUES
('abcd/eftthis.text/31/sadflh adslkjh'),
('abcd/eftthis.text/44/khjgb ljgnkhj this.text/447/lhkjgnkjh'),
('ljgkhjgadsvlkgnl'),
('uygouyg/this.text/31/luinluinlugnthis.text/31/ouygnouyg'),
('khjgbkjyghbk')


;WITH CTE
AS
(
SELECT MyColumn,
CHARINDEX('this.text/', myColumn, 0) AS startPos,
CHARINDEX('/', myColumn, CHARINDEX('this.text/', myColumn, 1) + 10) AS endPos
FROM #myTable
WHERE myColumn LIKE '%this.text/%'
UNION ALL
SELECT T1.MyColumn,
CHARINDEX('this.text/', T1.myColumn, C.endPos) AS startPos,
CHARINDEX('/', T1.myColumn, CHARINDEX('this.text/', T1.myColumn, c.endPos) + 10) AS endPos
FROM #myTable T1
INNER JOIN CTE C
ON C.myColumn = T1.myColumn
WHERE SUBSTRING(T1.MyColumn, C.EndPos, 100) LIKE '%this.text/%'

)
SELECT DISTINCT SUBSTRING(myColumn, startPos, EndPos - startPos)
FROM CTE

关于mysql - SQL:通过掩码从表中选择唯一的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501544/

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