首页 > 解决方案 > 使用 SQL 将文本重新排列为不同的顺序

问题描述

我有一个文本RAW/+A/@B/abs.m>C,它必须转换为A.B.C

有人可以帮助我使用高效的 SQL。我正在努力建立一个。

这是要遵循的规则 - 使用“>”右侧的任何内容,然后使用每个“+”或“@”之后的任何内容

例如fixedpoint/fixedpoint/+embedded/@fi/abs.m>abs 变成 embedded.fi.abs

标签: sqlsql-servertsql

解决方案


如果每个特殊字符只有一个实例,+ @ >则以下将起作用。

declare @table table (c1 varchar(64))
insert into @table
values
('RAW/+A/@B/abs.m>C '),
('fixedpoint/fixedpoint/+embedded/@fi/abs.m>abs')

;with cte as(
select
    fst = substring(c1,charindex('+',c1) + 1,charindex('/',substring(c1,charindex('+',c1) + 1,8000)) - 1)
    ,mid = substring(c1,charindex('@',c1) + 1,charindex('/',substring(c1,charindex('@',c1) + 1,8000)) - 1)
    ,lst = substring(c1,charindex('>',c1) + 1,8000)
from
    @table)

select
    fst + '.' + mid + '.' + lst
from cte

推荐阅读