`

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

 
阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>
问题说明: 解决方法:
在开发中经常遇到要对“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) = 1SET @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)


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=130533


分享到:
评论

相关推荐

    易语言程序免安装版下载

    易语言5.1 相对于易语言5.0更新说明: ... 修改XML解析支持库,增加写出CDATA数据功能,解决解析XML时错误的丢弃换行和TAB字符的BUG,解决读取节点值时对CDATA数据进行转义处理的BUG。 20. 修改扩展界面支持库...

    SQL语法大全

    sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" (3) 删除数据记录: sql="delete from 数据表 where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) (4) 添加...

    计算机应用基础Excel题库--.doc

    对数据清单中的数据进行排序时,可按某一字段进行排序,也可按多个字段进行排序 ,在按多个字段进行排序时称为〔 〕。 3.对数据清单中的数据进行排序时,对每一个字段还可以指定〔 〕。 4.Excel97共提供了3类运算符...

    MYSQL常用命令大全

    命令: select &lt;字段1,字段2,...&gt; from 表名 &gt; where 表达式 &gt; 例如:查看表 MyClass 中所有数据 mysql&gt; select * from MyClass; 2)、查询前几行数据 例如:查看表 MyClass 中前2行数据 mysql&gt; select * from ...

    orcale常用命令

    1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;sqlplus SQL&gt;connect internal SQL&gt;startup SQL&gt;quit b、关闭ORACLE系统 oracle&gt;sqlplus SQL&gt;...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    桌面数据库-x86v2012.05.003

    4、序号类字段整理,不再仅限于排序字段,可对其他字段做相应处理。 5、文本编辑器更新。 ---------------------------------- 简介 《桌面数据库》不是一款单纯的软件,而是一个高效的数据管理与表格制作平台,功能...

    经典SQL语句大全

    排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 ...

    数据库操作语句大全(sql)

    排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 ...

    sql经典语句一部分

    排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 ...

    《计算机应用基础》1-3次作业.docx

    当进行Excel2010中的分类汇总时,必须事先按分类字段对数据表进行的操作是:D.排序 *5.计算机配置的内存的容量为1GB,其中的1GB是指:D.1×1024×1024×1024个字节 *6.在PowerPoint中,停止幻灯片播放的快捷键是_____...

    790个易模块打包下载-2

    对内存进行读写操作.0.ec 多彩渐变换肤模块.ec 多方式取IP模块.ec 多功能模块(1).ec 多功能模块(2).ec 多媒体.ec 多线程支持模块.ec 多种对话框模块 1.0.ec 堕之星辰1.2.ec 发送消息_全选插入.ec 防破解....

    Transact-SQL编程规范

    Transact-SQL编程规范 1 概述 3 1.1.基本原则 3 1.2.基本规范 3 命名规范 3 1.3.对象命名 4 1.3.1. 数据库 4 1.3.2. 数据库文件 4 1.3.3. 关系型数据仓库 4 1.3.4. 数据架构 4 1.3.5. 数据表 5 1.3.6. 数据视图 5 ...

    MySQL命令大全

    如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下类似命令: mysql -uroot -p; mysql -uroot -pnewpassword; mysql mydb ...

    《计算机应用基础》1-6次作业.docx

    《计算机应用基础》1-6次作业 本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March 本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year....

    Java面试宝典-经典

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    版次:1-1 主编推荐  资深Oracle专家力作,OakTable团队推荐  全面、独到、翔实,题材丰富  Oracle开发人员和DBA必备 内容简介  Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了...

    SQL性能优化

     如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A&gt;2与A&gt;=3的效果就有很大的区别了,因为A&gt;2时ORACLE会先找出为2的记录索引再进行比较,而A&gt;=3时...

    易语言模块大全汇总批量下载

    2004-09-02 16:58 3875 1504 易语言模块大全\BoyChong-神2多方式取IP模块.ec 2005-10-21 23:30 85873 8419 易语言模块大全\BoyChong专用常用模块2.ec 2004-02-07 10:17 4396930 326963 易语言模块大全\Cool皮肤模块....

Global site tag (gtag.js) - Google Analytics