2014-10-03 51 views
1

我有產品編號的3行通過特殊字符分隔用/分隔的分割字符串; - 從一個記錄到許多獨特的記錄

/ ; - , 

行1具有值62200; 62251/62201 1列SQL表。

我怎麼可以拆分這些產品編號爲單獨的記錄,使上面記錄成爲3條記錄,如:

62200 
62251 
62201 

我也想保持原來的列映射的目的。希望是這樣的:

62200; 62251/62201  62200 
62200; 62251/62201  62251 
62200; 62251/62201  62201 
+5

您正在使用哪種數據庫引擎SQL Server?甲骨文?請註明,因爲它們的內置函數都略有不同。 – guildsbounty 2014-10-03 20:17:35

回答

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  

您也可以嘗試用正則表達式來解決這個問題,這可能是少一些代碼沉重。另外,爲了不把自己埋在重複的代碼中,我會將「分裂」行爲從自己的功能中提取出來。

Oracle中的等價函數是INSTR和SUBSTR,如果這是您正在使用的。 Credit for the example