SQL根据字符串中的数字排序

USE [Test]
GO

SELECT 
ProcessName
,INDEX1
,INDEX2
,INDEX3
,CAST(SUBSTRING(ProcessName,0,INDEX1) AS INT)*10000
+CAST(SUBSTRING(ProcessName,INDEX1+1,INDEX2-INDEX1-1) AS INT)*100
+CAST(SUBSTRING(ProcessName,INDEX2+1,INDEX3-INDEX2-1) AS INT)
AS Sort
FROM
(
	SELECT ProcessName
	,CHARINDEX('.',ProcessName) AS INDEX1
	,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1) AS INDEX2
	,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1)+1) AS INDEX3
	FROM ProcessPublish
) AS table1
ORDER BY Sort ASC

结果如下图:


优化代码:字符串中没有三个.,排序序号设置为0

USE [Test]
GO

SELECT 
ProcessName
,INDEX1
,INDEX2
,INDEX3
,CASE WHEN INDEX1>0 AND INDEX2>0 AND INDEX3>0 THEN--判断是否字符中包含3个.
	CAST(SUBSTRING(ProcessName,0,INDEX1) AS INT)*10000
	+CAST(SUBSTRING(ProcessName,INDEX1+1,INDEX2-INDEX1-1) AS INT)*100
	+CAST(SUBSTRING(ProcessName,INDEX2+1,INDEX3-INDEX2-1) AS INT)
ELSE 0 END
AS Sort
FROM
(
	SELECT ProcessName
	,CHARINDEX('.',ProcessName) AS INDEX1
	,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1) AS INDEX2
	,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName,CHARINDEX('.',ProcessName)+1)+1) AS INDEX3
	FROM ProcessPublish
) AS table1
ORDER BY Sort ASC


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值