SQLServer实现将VARCHAR字符型对象转化为int/float数值型对象后排序、对VARCHAR对象截取指定部分再转化为数值对象进行排序

         昨天在写入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位长度的对象进行降序排序

       实践之后,越发感慨数据库的强大,学习了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值