Nil*_*ils 0 sql t-sql split rows delimiter
我有一个看起来像这样的表:
ID Value
1 1,10
2 7,9
Run Code Online (Sandbox Code Playgroud)
我希望我的结果看起来像这样:
ID Value
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
2 7
2 8
2 9
Run Code Online (Sandbox Code Playgroud)
我在两个2数字之间的范围之后,作为分隔符(在值中只能有一个分隔符)以及如何将其拆分为行.
将逗号分隔的数字拆分是此问题的一小部分.解析应该在应用程序中完成,范围存储在单独的列中.出于多个原因:将数字存储为字符串是个坏主意.在一列中存储两个属性是个坏主意.实际上,将未经过处理的用户输入存储在数据库中通常也是一个坏主意.
在任何情况下,生成数字列表的一种方法是使用递归CTE:
with t as (
select t.*, cast(left(value, charindex(',', value) - 1) as int) as first,
cast(substring(value, charindex(',', value) + 1, 100) as int) as last
from table t
),
cte as (
select t.id, t.first as value, t.last
from t
union all
select cte.id, cte.value + 1, cte.last
from cte
where cte.value < cte.last
)
select id, value
from cte
order by id, value;
Run Code Online (Sandbox Code Playgroud)
MAXRECURSION如果范围真的很大,你可能需要摆弄它的价值.