如果对字符型编号字段(如1-2)进行排序

问题说明:
在开发中经常遇到要对“1-2”、“1-15”或“1.2”、“1.15”这样的数据字段进行排序,而这样的字段不能直接通过ORDER BY的方式来排序。
解决方法:
通过一个用户函数将此类数据字段变成输出成直接可以排序的的字段:
CREATE FUNCTION dbo.GetNumberOrderString
(
@NumberString NVARCHAR(200), --待处理字符
@SplitChar NVARCHAR(10) = '-', --分隔符
@Length INT = 2 --每段的字符长度
)
RETURNS NVARCHAR(500) AS
BEGIN
DECLARE @Result NVARCHAR(500)-- 结果
SET @Result = ''
DECLARE @F INT-- 第一个分隔字符的位置
WHILE LEN(@NumberString) > 0
BEGIN
-- 取出字符串
SET @F = CHARINDEX(@SplitChar, @NumberString)--取第一个分隔串的位置
--PRINT @F
DECLARE @V NVARCHAR(100)
IF @F = 0
BEGIN
SET @V = @NumberString
--PRINT @V
SET @NumberString = ''
--PRINT @NumberString
END
ELSE
BEGIN

SET @V = SUBSTRING(@NumberString, 0, @F ) --取第一个分隔串的之前值
--PRINT @V
SET @NumberString = SUBSTRING(@NumberString, @F + 1, LEN(@NumberString) - @F)--取第一个分隔串之后的值
--PRINT @NumberString

END

-- 按长度对齐字符串
-- IF LEN(@V) > @Length RAISERROR('对齐的长度超出范围', 1, 1)
IF ISNUMERIC(@V) = 1SET @V = REPLICATE('0', @Length - LEN(@V)) + @V
ELSE SET @V = @V + REPLICATE('0', @Length - LEN(@V))
SET @Result = @Result + @V
END
RETURN @Result
END

使用实例:
SELECT *FROM item ORDER BY dbo.GetNumberOrderString(id, '-', 3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值