由/ - 分隔的分割字符串; - 从一条记录到许多独特的记录

时间:2014-10-03 20:07:53

标签: sql

我有一个1列的SQL表,其中3行产品编号用特殊字符分隔

/ ; - , 

第1行的值为62200; 62251 / 62201

如何将这些产品编号拆分为单独的记录,以便上述记录将成为3条记录,如:

62200
62251
62201

我还想保留原始列以进行映射。希望是这样的:

62200; 62251 / 62201        62200
62200; 62251 / 62201        62251
62200; 62251 / 62201        62201

1 个答案:

答案 0 :(得分:1)

假设SQL Server ......

查看CHARINDEX和SUBSTRING函数。下面是一个如何将其拆分的示例,我建议调整它以处理未找到所寻找的特殊字符时的情况。如果要将新值存储为某种数字,则可能还需要对结果进行TRIM以消除空白。

BEGIN 
    DECLARE @start INT, @end INT, @delimiter CHAR(1), 
    SET @string NVARCHAR(MAX) = [string to split goes here!]
    SET @delimiter = ';'
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    INSERT INTO TABLE (fullstring, splitdata)  
    VALUES(@string, TRIM(SUBSTRING(@string, @start, @end - @start))) 
    SET @start = @end + 1 
    SET @delimiter = ';'
    SET @end = CHARINDEX(@delimiter, @string, @start)
    INSERT INTO TABLE (fullstring, splitdata)  
    VALUES(@string, TRIM(SUBSTRING(@string, @start, @end - @start)))
    SET @start = @end + 1 
    SET @delimiter = '/'
    SET @end = CHARINDEX(@delimiter, @string, @start)
    INSERT INTO TABLE (fullstring, splitdata)  
    VALUES(@string, TRIM(SUBSTRING(@string, @start, @end - @start)))
END     

您还可以尝试使用正则表达式解决这个问题,这可能会减少代码量。另外,为了不将自己埋没在重复的代码中,我会将“SPLIT”行为提取到自己的函数中。

Oracle中的等效函数是INSTR和SUBSTR,如果您正在使用它。 Credit for the example