博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Reverse函数
阅读量:5281 次
发布时间:2019-06-14

本文共 1421 字,大约阅读时间需要 4 分钟。

原文:

Sql sever里面有个自带的reverse函数,这个函数的主要功能是把一个字符产反转。比如对于:

select REVERSE('hello,world')
将得到如下的输出:dlrow,olleh
现在我的问题是,不使用这个函数而使一个字符串反转。
我找出来一种算法,第一种是使用递归,先找出最后一个字符,然后递归。最好的方式就是使用cte了。代码如下:
;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 cte3where len = 1order by seq, len
另外一种方式是,我先得到所有的单个字符,然后把这些字符从后往前聚合起来。代码如下:
;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)
 
关于如何使用这种聚合,我将在后面的文章中详解。
posted on
2018-03-24 09:24 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/8636824.html

你可能感兴趣的文章
Java面向对象抽象类案例分析
查看>>
100.Same Tree
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>
庖丁解“学生信息管理系统”
查看>>
Pyltp使用
查看>>
其他ip无法访问Yii的gii,配置ip就可以
查看>>
使用json格式输出
查看>>
border-image属性在chrome中的不同效果
查看>>
php做的一个简易爬虫
查看>>
x的x次幂的值为10,求x的近似值
查看>>
hdu-5009-Paint Pearls-dp
查看>>
内存泄漏调查
查看>>
jquery获取html元素的绝对位置和相对位置的方法
查看>>
谈谈spring
查看>>
ios中webservice报文的拼接
查看>>
Power BI 报告的评论服务支持移动设备
查看>>
HDU 4920 Matrix multiplication
查看>>
ACdream 1068
查看>>
会声会影毛玻璃制作
查看>>