sql - 如何使用 SQL Server 将“01020304”更改为“01,02,03,04”?
问题描述
给定以下 SQL,我如何将值@x
从01020304
to更改01,02,03,04
?
declare @x varchar(256)
set @x = '01020304'
--
-- How to change '01020304' to '01,02,03,04'?
--
select @x
解决方案
一种方法是递归 CTE:
with cte as (
select convert(varchar(max), '01020304') as rest, convert(varchar(max), '') as new_str, 1 as lev
union all
select stuff(rest, 1, 2, '') as rest, concat(new_str, ',', left(rest, 2)), lev + 1
from cte
where rest > ''
)
select top (1) stuff(new_str, 1, 1, '')
from cte
order by lev desc;
这是一个 db<>fiddle。
如果字符串可能有超过 100 个元素,您将需要添加option (maxrecursive 0)
.
推荐阅读
- odoo - 如何在 Odoo 中删除或归档公司?
- html - 你可以为海报属性提供后备吗?
- php - Docker 构建:Symfony 4 类 PdoSessionHandler 不存在
- c# - 将文件加载到 RichTextBox 时,某些超链接不会触发 LinkClicked 事件
- python - 使用 PowerTransformer 时如何正确使用 inverse_transform 方法?
- apache - 如何使用 Jenkins 部署到 Apache httpd
- python - 如何在函数内格式化转义序列
- c++ - 转到定义仅适用于 ubuntu 16.04 VM 中 vscode 1.36 的 intelliSenseEngine = "Tag Parser"
- html - 强制表格内的表格填充剩余的屏幕高度
- firebase - Flutter_markdown 与 Firestore 图像崩溃