对字符型编号字段(如1-2)进行排序-赵文斌
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 综合其它


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

发表时间:2014/3/30 18:14:49 评论(0) 浏览(5358)  评论 | 加入收藏 | 复制
   
摘 要:在开发中经常遇到要对“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)

Access软件网交流QQ群(群号:198465573)
 
 相关文章
悟道同学--特殊排序  【赵文斌  2012/5/7】
Access排序规则  【网行者  2012/7/29】
Access自定义排序规则之:按一二三四排序示例  【风行  2012/11/3】
【译文】对结果记录集进行排序(三)  【周芳  2014/3/17】
常见问答
技术分类
相关资源
文章搜索
关于作者

赵文斌

文章分类

文章存档

友情链接