sql - MS Sql 按子字符串拆分特定列
问题描述
我正在尝试编写一个查询来按子字符串拆分和连接特定列。不知道如何实现
Create table #tmp1
(
ID bigint,
Code varchar(10)
)
insert into #tmp1 values(1,'')
insert into #tmp1 values(2,'DCBA')
insert into #tmp1 values(3,'BACD')
insert into #tmp1 values(4,'ABCD')
select * from #tmp1
select
ID,
* from #tmp1 a
我希望我的最终结果为
1
2 DCBA D 1
2 DCBA C 2
2 DCBA B 3
2 DCBA A 4
3 BACD B 1
3 BACD A 2
3 BACD C 3
3 BACD D 4
4 ABCD A 1
4 ABCD B 2
4 ABCD C 3
4 ABCD D 4
我试过 sql substring 但无法完成
解决方案
递归 CTE 可能是最简单的解决方案:
with cte as (
select id, code, stuff(code, 1, 1, '') as rest, left(code, 1) as letter, 1 as lev
from #tmp1
union all
select id, code, stuff(rest, 1, 1, '') as rest, left(rest, 1) as letter, lev + 1
from cte
where rest <> ''
)
select id, code, letter, lev
from cte;
这是一个 db<>fiddle。
实际上,这里有一个稍微简单的版本:
with cte as (
select id, code, left(code, 1) as letter, 1 as lev
from tmp1
union all
select id, code, substring(code, lev, 1) as letter, lev + 1
from cte
where lev < len(code)
)
select id, code, letter, lev
from cte;
推荐阅读
- c - 将分配的堆释放给操作系统
- linux - 如何在带有美元($)符号的yocto中设置root密码
- javascript - 我如何知道数组对象中有多少具有不同日期或日期的数据
- javascript - 抽屉导航器内的堆栈导航器出现错误
- javascript - 如何从不等于给定 ID 的 firebase 集合中获取第一个文档 ID?
- c++ - 运行命令“rosbag play example.bag”时发生错误。找不到与插件 rosbag/NoEncryptor 对应的库
- microsoft-graph-api - 如何使用 Graph API 获取所有 Azure AD b2c 用户的个人资料图片
- php - php strtotime 函数没有给出输出
- firebase - 如何持久化 Firebase UserCredential 对象,因此可以使用 UserCredential.sendEmailVerification() 函数
- html - 形成动作=“/登录”?斜线是什么意思?