昨天在写入SQLServer数据库的时候有一张表把所有的数据字段都写成了VARCHAR类型了,这样的好处就是很简单,出错概率小,麻烦就是如果我要依据一个字段:比如说人的年龄排序的时候就会出错,这里默认都是字符类型的对象,所以就会出现下面的情况:
76
69
51
43
42
36
35
100
这应该是一种字典序的结果,当然不满足我们这里实际场景的需求了,于是就需要在排序前进行处理,先把需要排序的字段转化为数值型对象再进行排序,这样就不会出现上面的问题了。
下面是具体的实践(适用于SQLServer):
SELECT * FROM MYDATA WHERE NAME='Jack' ORDER BY CONVERT(FLAOT,money) DESC
--先将money字段转化为float类型后再进行降序排序
SELECT * FROM MYDATA WHERE NAME='Jack' ORDER BY CONVERT(INT,age) DESC
--先将age字段转化为int类型后再进行降序排序
下面是适用于 SQLServer Oracle的语句:
SELECT * FROM MYDATA ORDER BY CAST(age AS INT) DESC
--先将age字段转化为int类型后再进行降序排序
SELECT * FROM MYDATA ORDER BY CAST(money AS FLOAT) DESC
--先将money字段转化为float类型后再进行降序排序
上面的仅仅是比较简单的情况,如果说一个字段是由数值和字符拼接在一起形成的那么处理起来就会相对复杂一点,因为不能对两种对象一起转化为int或者是float对象,这时候就需要用到SQLServer里面的字符串截取函数了,这个相关的函数介绍在我之前的博客里面已经详细介绍过了,这里简单举例实现说明:
SELECT * FROM MYDATA ORDER BY CONVERT(INT, LEFT(ATTRIBUTE2,LEN([ATTRIBUTE1]))) ASC, RIGHT(ATTRIBUTE3, 1) DESC
--取字段ATTRIBUTE2从左开始的字段ATTRIBUTE1的长度个数量的数值转化为int对象进行升序排序,同时
--取字段ATTRIBUTE3从右边开始的一位进行降序排序
SELECT * FROM MYDATA ORDER BY SUBSTRING(ATTRIBUTE5,1,5) DESC
--取字段ATTRIBUTE5的从左边第一位开始5位长度的对象进行降序排序
实践之后,越发感慨数据库的强大,学习了!