sql - 如何在sql server中将119.305.1983984.1转换为1.1983984.305.119?

标签 sql sql-server tsql sql-server-2016

我必须在 SQL Server 中将 119.305.1983984.1 转换为 1.1983984.305.119

我已经尝试使用 reverse 如下所示,但它不起作用

DECLARE @myvar varchar(20);  
SET @myvar = '119.305.1983984.1';  
SELECT REVERSE(@myvar) AS Reversed ;  
GO  

结果是1.4893891.503.911
预期结果是 1.1983984.305.119

我不想被颠倒。只希望最后显示:1.1983984.305.119

最佳答案

如果 token 数量已知且最多为四个(SQL Server 2012+):

DECLARE @myvar varchar(20);  
SET @myvar = '119.305.1983984.1';  

SELECT CONCAT(PARSENAME(@myvar,1),'.',PARSENAME(@myvar,2),'.',PARSENAME(@myvar,3),'.',PARSENAME(@myvar,4)) 

原值:119.305.1983984.1

SELECT 返回:1.1983984.305.119


如果 token 数量不同且 SQL Server 为 2017+:

DECLARE @myvar varchar(20), @separator CHAR(1)  
SET @myvar = '119.305.1983984.1';  
SET @separator = '.'


SELECT STRING_AGG(value, @separator)  WITHIN GROUP ( ORDER BY rn DESC ) 
FROM (
    SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT 0) ) rn
    FROM STRING_SPLIT ( @myvar , @separator )  
) d OPTION (MAXDOP 1)

SELECT 返回:1.1983984.305.119

关于sql - 如何在sql server中将119.305.1983984.1转换为1.1983984.305.119?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215310/

相关文章:

sql - 在SQL中联接表时出现问题

sql-server - 在 SQL Server 中为 Webhook 添加表触发器

sql - SQL Server LEFT JOIN和WHERE子句

c# - 如何在 C# 上获取所有 SQl 数据类型的列表?

mysql - 需要在不同条件下选择SQL中相同字段的总和

mysql - 将子查询转换为连接查询

mysql - Insert into on duplicate update Mysql错误

sql - 空字符串与NULL

sql - '(' 附近的语法不正确。期待身份证件

sql - ms sql 上 SP 性能问题中的 UDF