SQL Server 使用分隔符拆分字符串

3
我有一个输入字符串。
100|2|3,101|2|1,103|2|3.

我想解析并将其添加到一个有3列的表中,因此它应该像这样:f.x。
 col1 col2 col3 
 100   2     3

类似于其他用逗号分隔的数据作为记录,| 作为列。

谢谢

尼克


1
可能是重复的问题:如何将单列值拆分为多列值? - anatol
4个回答

1
或者这样:
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  @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
   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

(无列名) (无列名) (无列名) 100 2 3 101 2 1 103 2 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接