我有一个1列的SQL表,其中3行产品编号用特殊字符分隔
/ ; - ,
第1行的值为62200; 62251 / 62201
。
如何将这些产品编号拆分为单独的记录,以便上述记录将成为3条记录,如:
62200
62251
62201
我还想保留原始列以进行映射。希望是这样的:
62200; 62251 / 62201 62200
62200; 62251 / 62201 62251
62200; 62251 / 62201 62201
答案 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