对字符型编号字段(如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)
 - 用Access连续窗体制作的树...(11.03)
 - 【Access高效办公】上一年...(10.30)
 - Access制作的RGB转CM...(09.22)
 - Access制作的RGB调色板...(09.15)
 - Access制作的快速车牌输入...(09.13)
 - 【Access高效办公】统计当...(06.30)
 - 【Access高效办公】用复选...(06.24)
 - 根据变化的日期来自动编号的示例...(06.20)
 - 【Access高效办公】按日期...(06.12)
 
  学习心得
最新文章
- 用Access连续窗体制作的树菜单...(11.03)
 - 【Access高效办公】上一年度累...(10.30)
 - Access做的一个《中华经典论语...(10.25)
 - Access快速开发平台--加载事...(10.20)
 - 【Access有效性规则示例】两种...(10.10)
 - EXCEL表格扫描枪数据录入智能处...(10.09)
 - Access快速开发平台--多行文...(09.28)
 - 关于从Excel导入长文本数据到A...(09.24)
 - Access制作的RGB转CMYK...(09.22)
 - 关于重装系统后Access开发的软...(09.17)
 

  
.gif)
