如果對字符型編號字段(如1-2)進行排序
2024-07-21 02:07:06
供稿:網友
問題說明:在開發中經常遇到要對“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) = 1 set @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)