gpt4 book ai didi

SQL如何返回基于逗号分隔的其他子字符串位置的列值

转载 作者:行者123 更新时间:2023-12-04 05:13:39 25 4
gpt4 key购买 nike

我的第一篇文章!我希望你能帮助我 :)

我在 SQL 2017 中工作,我有一个这样的表:

+----+----------------+----------------+
|编号 |列 1 |列2 |
+-----+-----------------+-----------------+
| 110 | 450,2,50,110,600 | 3,45,30,901,1001 |
| 250 | 2,250,300,1 | 1,33,540,900 |
| 45 | 1,45,320 | 200,444,600 |
+-----+----------------+----------------+

逻辑是在 Col1 中找到 ID 位置,并根据该位置返回 Col2 中的子字符串。

示例:

ID 110 匹配 Col1 中的第 4 个位置,因此应该在 Col2 中返回 901 值。
ID 250 匹配 Col1 中的第二个位置,因此应该在 Col2 中返回 33 值。
ID 45 匹配 Col1 中的第二个位置,因此应在 Col2 中返回 400 值。

我做了不同的尝试都没有成功,可能我的方向错了。

你能帮忙吗?

我想要的输出是 Col2 的特定值。

谢谢!

最佳答案

对于 SQL Server 2016+(由于 STRING_SPLIT 支持,我不打算为更早的版本做一个

DECLARE @BadDesign table (ID int, Col1 varchar(200), Col2 varchar(200));

INSERT @BadDesign VALUES
(110,'450,2,50,110,600', '3,45,30,901,1001'),
(250,'2,250,300,1', '1,33,540,900'),
(45 ,'1,45,320', '200,444,600')

SELECT
*
FROM
@BadDesign B
CROSS APPLY
(SELECT
rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), value
FROM
STRING_SPLIT(B.Col1, ',')
) b1
CROSS APPLY
(SELECT
rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), value
FROM
STRING_SPLIT(B.Col2, ',')
) b2
WHERE
B.ID = b1.value AND b1.rn = b2.rn

不保证 ROW_NUMBER 与 STRING_SPLIT 输出的一致性。

编辑:还需要 database compatibility to be 130或以上 (SQL Server 2016)

The STRING_SPLIT function is available only under compatibility level 130. If your database compatibility level is lower than 130, SQL Server will not be able to find and execute STRING_SPLIT function. You can change a compatibility level of database using the following command: ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130

关于SQL如何返回基于逗号分隔的其他子字符串位置的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49258884/

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