Mysql SQL中的逗号分隔

Mysql SQL中的逗号分隔,mysql,sql,Mysql,Sql,我有一个带有以下字段的表tblexmaple FieldOne Field Two FieldThree ---------------------------------------------- 1 Test1 1,2,3 2 Test2 2,3,4,5 3 Test3 1 想要的结果是 1 Test1

我有一个带有以下字段的表tblexmaple

FieldOne       Field Two        FieldThree
----------------------------------------------
1              Test1            1,2,3
2              Test2            2,3,4,5
3              Test3            1
想要的结果是

1      Test1     1
1      Test1     2
1      Test1     3
2      Test2     2
2      Test2     3
2      Test2     4
2      Test2     5
3      Test3     1

任何人都可以帮忙吗?

下面是您的问题解决方案。用tblexmaple替换表_测试。下面的查询中使用了on函数,我也为该函数编写了代码

查询:-

DECLARE @Table TABLE
(
  ID INT,
  Name VARCHAR(100)
)

DECLARE @ResultTable TABLE
(
  FieldOne INT,
  FieldTwo VARCHAR(100),
  FieldThree INT
)

INSERT INTO @Table
SELECT 
    ID,
    Name
FROM Table_Test 

DECLARE @ID INT;
DECLARE @Name VARCHAR(100);
DECLARE @IDs VARCHAR(100);
WHILE (SELECT COUNT(*) FROM @Table) > 0
BEGIN
    SELECT TOP 1 @ID = ID,@Name = Name FROM @Table
    SELECT @IDs = IDs FROM Table_Test WHERE ID = @ID

    INSERT INTO @ResultTable
    SELECT @ID, @Name, * FROM dbo.Split(@IDs,',')

    DELETE FROM @Table WHERE ID = @ID   
END

SELECT * FROM @ResultTable

Function Code :-

/****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 12/16/2013 12:15:59 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(500))       
as       
begin       
    declare @idx int       
    declare @slice varchar(MAX)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return       
end  
GO

你没有描述你的问题,也没有描述你想要完成什么。See和@parvus我想很明显,OP希望通过将Field Three从逗号分隔的列表转换为多行来规范化他的数据。您可以使用PLSQL来获取它,我认为不可能编写一个能够实现这一点的查询。您永远不应该以这种方式存储关系数据。您需要的是一个单独的表,其中包含三个字段值和一个用于处理多对多关系的表