SQL Reverse函数
Sql sever里面有个自带的reverse函数,这个函数的主要功能是把一个字符产反转。比如对于:
1 | select REVERSE( 'hello,world' ) |
1 | 将得到如下的输出:dlrow,olleh |
1 | 现在我的问题是,不使用这个函数而使一个字符串反转。 |
1 | 我找出来一种算法,第一种是使用递归,先找出最后一个字符,然后递归。最好的方式就是使用cte了。代码如下: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ;with cte1(seq, vv) as ( select 1, 'fine' union all select 2, 'great' union all select 3, 'adfinioqweiweio' union all select 5, 'hello,world' union all select 4, 'piasdf' ), cte2(seq, vv, vvs, len) as ( select seq, vv, cast(substring(vv, len(vv), 1) as varchar(200)), len(vv) from cte1 ) ,cte3(seq, vv, vvs, len) as ( select * from cte2 union all select c2.seq, c3.vv, cast(c3.vvs + substring(c3.vv, c3.len-1, 1) as varchar(200)), c3.len-1 from cte2 c2 join cte3 c3 on c2.seq = c3.seq and c3.len <= c2.len and c3.len > 1 ) select * from cte3 where len = 1 order by seq, len |
1 | 另外一种方式是,我先得到所有的单个字符,然后把这些字符从后往前聚合起来。代码如下: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ;with cte1(id, data) as ( select 1, 'Jacob' union all select 2, 'Sebastn' union all select 3, 'Hello,world' ) ,Numbers AS ( SELECT *, SUBSTRING(data, n, 1) as sub FROM cte1 join dbo.Number on N <= len(data) ) select * from cte1 c1 cross apply( select substring(sub, 1, len(sub)) from Numbers nm where nm.id = c1.id order by n desc for xml path( '' ) ) as c(p) |
1 | |
1 | 关于如何使用这种聚合,我将在后面的文章中详解。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述