SQL中的字符串拆分函数
我正在使用一个大型数据库,该数据库使用两列链接客户端信息:co_代码和I_代码。当我们从旧系统传输数据时,co_代码包括客户的新ID。i_code是先前的客户端ID,其中的信息在数据系统中仍然相关,我需要为我正在创建的报告提取这些信息 但是,i_代码列有时有多个ID,它们属于同一个新的co_代码ID。例如:SQL中的字符串拆分函数,sql,sql-server,Sql,Sql Server,我正在使用一个大型数据库,该数据库使用两列链接客户端信息:co_代码和I_代码。当我们从旧系统传输数据时,co_代码包括客户的新ID。i_code是先前的客户端ID,其中的信息在数据系统中仍然相关,我需要为我正在创建的报告提取这些信息 但是,i_代码列有时有多个ID,它们属于同一个新的co_代码ID。例如: +---------+---------------------------+ | co_code | i_code | +---------+--
+---------+---------------------------+
| co_code | i_code |
+---------+---------------------------|
| 1 | 768 |
| 2 | 134,4546,234 |
| 3 | 2354 |
| 4 | 3454,65465 |
| 5 | 432,76878,3543,43546,3435 |
| 6 | 535,65765 |
| 7 | 6345 |
| 8 | 1675 |
| 9 | 256 |
| 10 | 3768,6585,4654 |
+---------+---------------------------+
我尝试了一系列不同的字符串分割变体。我最近的发言是:
从产品详细信息中选择co_代码、i_代码
其中i_代码在中,从字符串“i_代码”中选择i_代码
到目前为止,我还没有任何机会将字符串分开,除非我将每一行单独分开。因为我正在处理数千行,所以在很短的时间内这是不可行的
理想情况下,输出如下所示:
+---------+--------+
| co_code | i_code |
+---------+--------+
| 1 | 768 |
| 2 | 134 |
| 2 | 4546 |
| 2 | 234 |
| 3 | 2354 |
| 4 | 3454 |
| 4 | 65465 |
| 5 | 432 |
| 5 | 76878 |
| 5 | 3543 |
| 5 | 43546 |
| 5 | 3435 |
| 6 | 535 |
| 6 | 65765 |
| 7 | 6345 |
| 8 | 1675 |
| 9 | 256 |
| 10 | 3768 |
| 10 | 6585 |
| 10 | 4654 |
+---------+--------+
如果您使用的是SQL Server 2016或更高版本,则可以使用 请参见以下示例:
create table #code(co_code int, i_code varchar(max));
insert into #code(co_code, i_code)
values(1, '2,3,4'),(2, '3,4,5');
SELECT co_code, value as i_code_new
FROM #code
CROSS APPLY STRING_SPLIT(i_code, ',');
如果您使用的是较旧版本的SQL,则必须自己编写拆分函数,或使用以下函数:
CREATE FUNCTION [dbo].[udfSplitString]
(
@List VARCHAR(MAX),
@Delim VARCHAR(2)
)
RETURNS TABLE
AS
RETURN ( SELECT [Value] FROM
(
SELECT
[Value] = LTRIM(RTRIM(SUBSTRING(@List, [Number],
CHARINDEX(@Delim, @List + @Delim, [Number]) - [Number])))
FROM (SELECT Number = ROW_NUMBER() OVER (ORDER BY name)
FROM sys.all_objects) AS x
WHERE Number <= LEN(@List)
AND SUBSTRING(@Delim + @List, [Number], LEN(@Delim)) = @Delim
) AS y
);
我不知道MySQL中有一个字符串分割函数。您真正使用的是什么数据库?您好,我正在使用Microsoft SQL Server管理研究。我想您的答案在这里。答案取决于SQL Server的版本。2016+将与字符串_splitThank you@CarlosAlvesJorge交叉应用,但该链接不支持我正在使用的SQL Server。感谢您在下的输入@。我尝试了您的第一个示例,尽管脚本运行,但I_代码列仍然不会将聚合在单个单元格中的单独代码拆分为每个co_代码如果对象_ID'tempdb。。代码“非空”删除表格代码创建表格代码co_代码int,i_代码varcharmax插入代码选择co_代码,i_代码来自产品详细信息作为pd交叉应用字符串,,“选择*来自代码任何想法?我仍在检索以下示例,对代码的显示方式表示歉意!你能发布你得到的结果和你期望的结果吗?嗨,结果和上面完全一样。我的剧本似乎对结果没有任何影响。我试图将其粘贴到此处,但字符数不足。您可以更新问题或向我发送消息。我的脚本可以按原样运行。它生产1,2,1,3,1,4,2,3,2,4,2,5。你希望得到什么?
SELECT co_code, value as i_code_new
FROM #code
CROSS APPLY [udfSplitString](i_code, ',');