我没有创建功能所需的访问权限;但我需要能够解析以下文字。
ID value
684286211 96756263;97051390
683855568 96825924;96862563;96862652;96862684;96862692
需要:
ID value
684286211 96756263
684286211 97051390
683855568 96825924
683855568 96862563
683855568 96862652
683855568 96862684
683855568 96862692
我尝试过使用Parsename语句,但它仅适用于4个或更少的部分;我需要允许最多九个值。
使用sql 2012
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以为此目的使用递归CTE:
with CTE as (
select id, value,
left(value, charindex(';', value)) as val,
substring(value, charindex(';', value) + 1, len(value))+';' as restval
from t
where value like '%;%'
union all
select id, value, left(restval, charindex(';', restval)) as val,
substring(restrval, charindex(';', restval) + 1, len(restval))
from cte
where value like '%;%'
)
select id, val
from cte
union all
select id, value
from t
where value not like '%;%';
避免没有分号的值的错误是一种痛苦。我认为这是一种方法。