tsql - TSQL - 在一个字符串中,每 2 个字符用一个固定的字符替换一个字符
问题描述
我不能用“。”替换字符串的每 2 个字符。
选择 STUFF('abcdefghi', 3, 1, '.') c3,STUFF('abcdefghi', 5, 1, '.') c5,STUFF('abcdefghi', 7, 1, '.') c7,STUFF ('abcdefghi', 9, 1, '.') c9
如果我使用 STUFF,我应该随后将字符串 c3、c5、c7 和 c9 重叠。但我找不到方法
你能帮助我吗?
初始字符串:
abcdefghi
我想要的结果是
ab.de.gh.
字符串最多可包含 50 个字符
解决方案
创建一个 numbers/tally/digits 表,如果您还没有,那么您可以使用它来定位每个字符位置:
with digits as ( /* This would be a real table, here it's just to test */
select n from (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10))x(n)
), t as (
select 'abcdefghi' as s
)
select String_Agg( case when d.n%3 = 0 then '.' else Substring(t.s, d.n, 1) end, '')
from t
cross apply digits d
where d.n <Len(t.s)
for xml
与现有表一起使用
with digits as (
select n from (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10))x(n)
),
r as (
select t.id, case when d.n%3=0 then '.' else Substring(t.s, d.n, 1) end ch
from t
cross apply digits d
where d.n <Len(t.s)
)
select result=(select '' + ch
from r r2
where r2.id=r.id
for xml path('')
)
from r
group by r.id
推荐阅读
- python - 如何绘制分支 sin(x) 函数
- android-studio - 勾选记住密码时Android Studio“无法恢复密钥”
- javascript - 调用 setState 后 useState setState 不更新状态
- azure - 为什么 docker login 将我的密码存储在未加密的文件夹中,我应该对此做些什么?
- android-studio - 如何使用 Volley 将 Object 列表转换为 MutableList
- react-native - 如何禁用 RCTView?
- vcf-vcard - 将照片添加到 vCard
- javascript - 如何将对象的属性分配给reactjs中的另一个属性?
- php - 在 CodeIgniter 4.1 模块中使用模型中的语言进行表单验证消息
- git - 如何告诉 git 显示我在上次提交中所做的更改的差异?