如何通过替换 SQL 中的特殊字符来旋转给定的字符串?

Posted

技术标签:

【中文标题】如何通过替换 SQL 中的特殊字符来旋转给定的字符串?【英文标题】:How to pivot given string by replacing special characters in SQL? 【发布时间】:2021-05-05 07:13:36 【问题描述】:

在一次采访中,我被要求通过替换特殊字符来旋转字符串。

给定的字符串是'AAA%BBB$CCC#DDD'

预期的输出如上图所示:

我们如何在 SQL Server 中做到这一点?提前致谢!

【问题讨论】:

你如何定义special characters,你需要每个子字符串的位置吗?如果您使用 SQL Server 2017+,TRANSLATE()STRING_SPLIT() 的组合是一个可能的选择。 @Zhorov 我们如何在 SQL Server 2014 中做到这一点? 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 复制或键入问题中的文本。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。请展示您尝试过的内容,并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 【参考方案1】:

在 SQL Server 2014 中?(我猜你使用的操作系统是 Windows Server 2008 R2,哈哈哈), 如果你使用SQL Server 2014-,基本上,你需要先统一不同的分隔符,

declare @str as varchar(1024) = 'AAA%BBB$CCC#DDD'
set @str = REPLACE(@str, '%', ',')
set @str = REPLACE(@str, '$', ',')
set @str = REPLACE(@str, '#', ',')

然后像这样:

;with c0 as
(
select REPLACE(@str, '"', '') + ',' as col0
), c1 as
(
select LEFT(col0, CHARINDEX(',', col0) - 1) as col1,
       STUFF(col0, 1, CHARINDEX(',', col0), '') as col2
from c0
union all
select LEFT(col2, CHARINDEX(',', col2) - 1) as col1,
       STUFF(col2, 1, CHARINDEX(',', col2), '') as col2
from c1
where LEN(col2) > 0
)

select col1 from c1 where col1 <> 'null'

;with c0 as
(
select @str as s
), c1 as
(
select number as n from master.dbo.spt_values where type = 'P'
)
select SUBSTRING(c0.s, c1.n, CHARINDEX(',', c0.s+',', c1.n)-c1.n) as item,
       c1.n - LEN(REPLACE(LEFT(c0.s, c1.n), ',', '')) + 1 as pos1,
       ROW_NUMBER() over(order by c1.n) as pos2,
       c1.n, c0.s
from c0
inner join c1 on c1.n <= LEN(c0.s) and SUBSTRING(','+c0.s, c1.n, 1) = ','

set @str = 'select col1 = ''' + REPLACE(@str,',',''' union all select ''') + ''''
set @str = 'select col1 from (' + @str + ') as D'
exec(@str)

set @str = '(values (''' + REPLACE(@str,',',''' ),( ''') + ''')) as tb(item)'
set @str = 'select item from ' + @str
exec(@str)

【讨论】:

以上是关于如何通过替换 SQL 中的特殊字符来旋转给定的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

sql中如何判断字符串中含有特殊字符

替换 PL/SQL 中的特殊 XML 字符

c#中 如何解决xml格式的字符串中特殊字符

SQL 中的特殊字符

如何替换插件打印的 WordPress 标题中的字符?

sql server 2005如何去空格