2016-12-30 50 views
3

我有一個輸入字符串SQL服務器分割字符串分隔符

100|2|3,101|2|1,103|2|3. 

我想解析和具有3列的表添加此所以應該去FX分離

col1 col2 col3 
100 2  3 

類似其他數據以逗號作爲記錄,並以|作爲欄目。

感謝

NIK

+1

的可能的複製[如何分割的單個列值到多個列值?](http://stackoverflow.com/questions/5123585/how-to-split-a-single -column值對多列值) – anatol

回答

0

嘗試這種方式

DECLARE @TAB TABLE(COLUMN1 INT, COLUMN2 INT, COLUMN3 INT) 

DECLARE @STRING VARCHAR(MAX)='100|2|3,101|2|1,103|2|3,' 
SELECT @STRING = 'SELECT ' + REPLACE(REPLACE (@STRING, ',',' 
UNION ALL 
SELECT '),'|',',') 

SELECT @STRING = SUBSTRING(@STRING,1,LEN(@STRING)-18) 


INSERT INTO @TAB 
EXEC(@STRING) 

SELECT * FROM @TAB 

而其結果將是

+---------+---------+---------+ 
| COLUMN1 | COLUMN2 | COLUMN3 | 
+---------+---------+---------+ 
|  100 |  2 |  3 | 
|  101 |  2 |  1 | 
|  103 |  2 |  3 | 
+---------+---------+---------+ 
0

或者這樣說:

SELECT 
    LEFT(value, Charindex('|', value) - 1), 
    SUBSTRING(value, Charindex('|', value) + 1,Len(value) - Charindex('|', Reverse(value)) - Charindex('|', value)), 
    RIGHT(value, Charindex('|', Reverse(value)) - 1) 
FROM 
    string_split('100|2|3,101|2|1,103|2|3',',') 
0
Declare @temp table(col1 int,col2 int ,col3 int) 
    Declare @pos int,@str nvarchar(max),@len int 

    Set @str='100|2|3' 
    Set @pos=1 

Select @len=len(@str) 

Insert into @temp 
Select substring(@str,@pos,charindex('|',@str,@pos)-1), 
     substring(@str,charindex('|',@str,@pos)+1,charindex('|',@str,@pos)-3), 
     substring(@str,charindex('|',@str,charindex('|',@str,@pos)+1)+1,@len) 
Select * from @temp 
0
;WITH tb(s)AS(
     SELECT '100|2|3' UNION 
     SELECT '101|2|1' UNION 
     SELECT '103|2|3' 
) 
SELECT PARSENAME(REPLACE(s,'|','.'),3) 
     ,PARSENAME(REPLACE(s,'|','.'),2) 
     ,PARSENAME(REPLACE(s,'|','.'),1) 
FROM tb 
 
(No column name) (No column name) (No column name) 
100 2 3 
101 2 1 
103 2 3