数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
如果对字符型编号字段(如1-2)进行排序

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

问题说明:
在开发中经常遇到要对“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)



相关文章

相关软件