Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的字符串拆分函数_Sql_Sql Server - Fatal编程技术网

SQL中的字符串拆分函数

SQL中的字符串拆分函数,sql,sql-server,Sql,Sql Server,我正在使用一个大型数据库,该数据库使用两列链接客户端信息:co_代码和I_代码。当我们从旧系统传输数据时,co_代码包括客户的新ID。i_code是先前的客户端ID,其中的信息在数据系统中仍然相关,我需要为我正在创建的报告提取这些信息 但是,i_代码列有时有多个ID,它们属于同一个新的co_代码ID。例如: +---------+---------------------------+ | co_code | i_code | +---------+--

我正在使用一个大型数据库,该数据库使用两列链接客户端信息:co_代码和I_代码。当我们从旧系统传输数据时,co_代码包括客户的新ID。i_code是先前的客户端ID,其中的信息在数据系统中仍然相关,我需要为我正在创建的报告提取这些信息

但是,i_代码列有时有多个ID,它们属于同一个新的co_代码ID。例如:

+---------+---------------------------+
| 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, ',');