Reverse order of elements in a string(字符串中元素的反向顺序)
本文介绍了字符串中元素的反向顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下字符串:
1119/2/483/11021
我想颠倒该字符串中元素的顺序。所需输出:
11021/483/2/1119
T-SQL 2014版
推荐答案
您需要一个有序的拆分函数,例如(inspiration):
CREATE FUNCTION dbo.SplitOrdered
(
@list nvarchar(max),
@delim nvarchar(10)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
WITH w(n) AS (SELECT 0 FROM (VALUES (0),(0),(0),(0)) w(n)),
k(n) AS (SELECT 0 FROM w a, w b),
r(n) AS (SELECT 0 FROM k a, k b, k c, k d, k e, k f, k g, k h),
p(n) AS (SELECT TOP (COALESCE(LEN(@list), 0))
ROW_NUMBER() OVER (ORDER BY @@SPID) -1 FROM r),
spots(p) AS
(
SELECT n FROM p
WHERE (SUBSTRING(@list, n, LEN(@delim + 'x') - 1) LIKE @delim OR n = 0)
),
parts(p,val) AS
(
SELECT p, SUBSTRING(@list, p + LEN(@delim + 'x') - 1,
LEAD(p, 1, 2147483647) OVER (ORDER BY p) - p - LEN(@delim))
FROM spots AS s
)
SELECT listpos = ROW_NUMBER() OVER (ORDER BY p),
Item = LTRIM(RTRIM(val))
FROM parts
);
然后您可以在较低版本上使用STRING_AGG()
(如果SQL Server 2017或更高版本)或FOR XML PATH
重新组装:
SQL Server 2017+
DECLARE @OriginalString nvarchar(255) = N'1119/2/483/11021';
SELECT NewString = STRING_AGG(o.Item, N'/')
WITHIN GROUP (ORDER BY listpos DESC)
FROM dbo.SplitOrdered(@OriginalString, N'/') AS o;
SQL Server<;2017
DECLARE @OriginalString nvarchar(255) = N'1119/2/483/11021';
SELECT NewString = STUFF(
(SELECT N'/' + o.Item
FROM dbo.SplitOrdered(@OriginalString, N'/') AS o
ORDER BY o.listpos DESC
FOR XML PATH(''), TYPE).value(N'./text()[1]', N'nvarchar(max)'),1,1,N'');
- 示例db<>fiddle
这篇关于字符串中元素的反向顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:字符串中元素的反向顺序


猜你喜欢
- 如何在oracle中获取字符串最右边的10个位置 2021-01-01
- MySql 错误 150 - 外键 2021-01-01
- SQL Server 将 Varchar 转换为日期时间 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 创建索引时,具有 mysql 数据库迁移的实体框架失败 2022-01-01
- 如何将uuid存储为数字? 2021-01-01
- 在 Oracle 中创建 CTE 2022-01-01
- MySQL(Windows10)使用 MyISAM 表进行 FULLTEXT 搜索不起作用 2022-01-01
- HEROKU - 无法运行 git push heroku master 2021-01-01
- Oracle SQL 转置 2022-01-01