我有一個輸入字符串SQL服務器分割字符串分隔符
100|2|3,101|2|1,103|2|3.
我想解析和具有3列的表添加此所以應該去FX分離
col1 col2 col3
100 2 3
類似其他數據以逗號作爲記錄,並以|
作爲欄目。
感謝
NIK
我有一個輸入字符串SQL服務器分割字符串分隔符
100|2|3,101|2|1,103|2|3.
我想解析和具有3列的表添加此所以應該去FX分離
col1 col2 col3
100 2 3
類似其他數據以逗號作爲記錄,並以|
作爲欄目。
感謝
NIK
嘗試這種方式
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 |
+---------+---------+---------+
或者這樣說:
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',',')
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
;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
的可能的複製[如何分割的單個列值到多個列值?](http://stackoverflow.com/questions/5123585/how-to-split-a-single -column值對多列值) – anatol