SQL Server:如何将字符串拆分成多行?

时间:2018-06-15 19:16:06

标签: sql sql-server

你能帮我解决这个问题吗?

我在DESCRIPTION列中有这个字符串(是的,这是唯一一个包含此案例数据的列= /):

"P.A. - Solicitação [945159][945171][944007][944836][944946][945065][945068][945074][945149][945087][946032][946139][947042][945552][945980][946194] - Chamado  Tipo: SOLICITAÇÕES DE T.I. Sistema ou aplicação: SISTEMAS T.I. Sub-processo: REVOGAÇÃO DE ACESSOS DE TERCEIROS  Solicitante"

我需要将这些数字放在不同的行中,例如:

Row 1 - 945159
Row 2 - 945171
Row 3 - 944007
Row 4 - 944836
Row 5 - 944946

我不知道该怎么做。有人可以帮帮我吗?

我需要这些信息,因为我从另一个表中收到这些分开的数字,但是这一个(Description列)并没有逐行显示这些数字,所以我无法加入它像:

SELECT * 
FROM table_with_description 
INNER JOIN second_table_with_numbers ON Description = single_number 

2 个答案:

答案 0 :(得分:1)

select * from(
SELECT  
    CASE WHEN 
    len(left( Ltrim(rtrim(Split.a.value('.', 'VARCHAR(max)'))), charindex(']', Ltrim(rtrim(Split.a.value('.', 'VARCHAR(max)'))))  ))>0
    THEN 
    left( Ltrim(rtrim(Split.a.value('.', 'VARCHAR(max)'))), charindex(']', Ltrim(rtrim(Split.a.value('.', 'VARCHAR(max)')))) -1)
    else null end  AS String  
 FROM 

  (SELECT    
         CAST ('<M>' + REPLACE([string], '[', '</M><M>') + '</M>' AS XML) AS String  
     FROM  #temp) AS A  
     CROSS APPLY String.nodes ('/M') AS Split(a) )a
     where string is not null

答案 1 :(得分:1)

你想要

使用该功能,以下是它的工作原理。

declare @table table (descrip varchar(max))
insert into @table
values
('"P.A. - Solicitação [945159][945171][944007][944836][944946][945065][945068][945074][945149][945087][946032][946139][947042][945552][945980][946194] - Chamado  Tipo: SOLICITAÇÕES DE T.I. Sistema ou aplicação: SISTEMAS T.I. Sub-processo: REVOGAÇÃO DE ACESSOS DE TERCEIROS  Solicitante"
')

select
    replace(s.Item,']','')
from @table cross apply dbo.DelimitedSplit8K(descrip,'[') s
where replace(s.Item,']','') not like '%[^0-9]%'