对字符型编号字段(如1-2)进行排序
时 间:2014-03-30 18:14:49
作 者:赵文斌 ID:4506 城市:深圳
摘 要:在开发中经常遇到要对“1-2”、“1-15”或“1.2”、“1.15”这样的数据字段进行排序,而这样的字段不能直接通过ORDER BY的方式来排序。
正 文:
通过一个用户函数将此类数据字段变成输出成直接可以排序的的字段:
Create FUNCTION dbo.GetNumberOrderString
(
@NumberString NVARCHAR(200), --待处理字符
@SplitChar NVARCHAR(10) = '-', --分隔符
@Length INT = 2 --每段的字符长度
)
(
@NumberString NVARCHAR(200), --待处理字符
@SplitChar NVARCHAR(10) = '-', --分隔符
@Length INT = 2 --每段的字符长度
)
RETURNS NVARCHAR(500) AS
BEGIN
DECLARE @Result NVARCHAR(500) -- 结果
SET @Result = ''
DECLARE @F INT -- 第一个分隔字符的位置
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
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)
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- Microsoft Access数...(04.18)
- 仓库管理实战课程(12)-月度结存...(04.16)
- 仓库管理实战课程(11)-人性化操...(04.15)
- 32位的Access软件转化为64...(04.12)
- 【Access高效办公】如何让vb...(04.11)
- 仓库管理实战课程(10)-入库功能...(04.08)
- Access快速开发平台--Fun...(04.07)
- 仓库管理实战课程(9)-开发往来单...(04.02)
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)