GROUP_CONCAT REPLACE sep字符串

时间:2014-09-17 16:16:00

标签: mysql sql replace group-concat

我使用以下语句从一个以“|”分隔的字段中从表中提取唯一值。它看起来像这样:“40 | 180 | 408 | 360 | 40 | 1s66 | 80 | 59”我的问题是我似乎无法获得此声明以允许我拉出主键字段,id并分配它从字段字符串中的每个唯一项目,以便我以后可以实际使用它。理想情况下,应从“40 | 180 | 408 | 360 | 40 | 1s66 | 80 | 59”为此临时表上的每个值分配ID#27。任何人都可以帮助我使用以下语句来允许我从表BlogImageBundle插入并为其分配字段ID吗?

CREATE TEMPORARY TABLE test (postId INT(11), val CHAR(255));
SET @S1 = CONCAT("INSERT INTO test (val) VALUES ('",REPLACE((SELECT GROUP_CONCAT( DISTINCT      `images`) 
AS data FROM `BlogImageBundle`), "|", "'),('"),"');");
PREPARE stmt1 FROM @s1;
EXECUTE stmt1;
SELECT DISTINCT(val) FROM test;

1 个答案:

答案 0 :(得分:1)

这只适用于一条记录。您需要添加另一个while循环来跟踪rowcount以处理多个记录:http://sqlfiddle.com/#!6/d62f7/1

CREATE TABLE #Test
(
    ID          INT,
    Initial     VARCHAR(MAX)
)
CREATE TABLE #Test2
(
    ID      INT,
    Final   VARCHAR(MAX)
)
INSERT INTO #Test VALUES(27,'40|180|408|360|40|1s66|80|59')

DECLARE @String    VARCHAR(MAX)
SET @string = (SELECT Initial FROM #Test)

DECLARE @StringInput VARCHAR(MAX)
SET @stringInput = (SELECT Initial FROM #Test)  
WHILE LEN(@StringInput) > 0
BEGIN
    SET @String = LEFT(@StringInput,ISNULL(NULLIF(CHARINDEX('|', @StringInput) - 1, -1),LEN(@StringInput)))
    SET @StringInput = SUBSTRING(@StringInput,ISNULL(NULLIF(CHARINDEX('|', @StringInput), 0),LEN(@StringInput)) + 1, LEN(@StringInput))
    INSERT INTO #Test2 (ID, Final)
    SELECT ID,@string FROM #Test
END