我需要解析文本而不创建函数

时间:2016-01-02 19:08:55

标签: sql sql-server parsing sql-server-2012

我没有创建功能所需的访问权限;但我需要能够解析以下文字。

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

任何帮助将不胜感激!

1 个答案:

答案 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 '%;%';

避免没有分号的值的错误是一种痛苦。我认为这是一种方法。