簡體   English   中英

SQL Server拆分字符串和分隔符

[英]SQL Server split string with delimiter

我有一個輸入字符串

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM