写sql的时候经常用到排序,但是有时候会遇到根据varchar类型的字段排序,直接进行排序的结果,却和number类型的排序不一样;
如下:根据varchar类型排序:
可以看出这时候的排列是从每个数据的第一位开始比较 ,并不是对整一个数值,这与我们现实中的理解不符合;
这时候需要用到to_number(字段名)函数:
如下例子所示:
所得到的结果如下所示:
即可得到我们想要的结果
写sql的时候经常用到排序,但是有时候会遇到根据varchar类型的字段排序,直接进行排序的结果,却和number类型的排序不一样;如下:根据varchar类型排序:可以看出这时候的排列是从每个数据的第一位开始比较 ,并不是对整一个数值,这与我们现实中的理解不符合;这时候需要用到to_number(字段名)函数:如下例子所示:所得到的结果如下所示:即可得到我们想要的
在进行查询
排序
的时候,发现字段中是带有数字的字符串,如果按照正常
排序
的话会出现1万、10万、2万、20万、5万的结果,但是我需要的结果是1万、2万、5万、10万、20万的结果。用
Oracle
中自带的to_
number
(regexp_substr(字段,’[0-9]*[0-9]’),1)即可。如果order by 后面有多个字段,且需要进行函数处理的字段不是排在第一位,不加to_
number
的话,这个函数是没有效果的 ,如果紧跟着order by就可以不用to_
number
。
注意:如果这个字段中包含“5万-
使用to_
number
(F_vol)转置,但是会提示无效的数字,最后仔细观察原来是 , 的原因,所以使用to_
number
(replace(f_cost,',',''))即可。
在最新的spring-boot(spring-boot-data)版本中通过new 来创建Sort是不可以的
查看源码,原来是Sort的构造器私有了private;所以不能通过new Sort()的方式来创建Sort对象
而是用 Sort.by()
Sort id = by(DESC,"id");//DESC降序,ASC升序;
直接写字段默认升序,Sort源码如下
@GetMapping("/findAll/{username}")
public List<User>.
参考文献:http://chengjunflying.iteye.com/blog/698505
在
oracle
中,如果要对
varchar
类型的字段进行order by操作,那么首先必须得将他们转化成数字类型,比如int类型,这就需要用到cast关键字。
SELECT procedure_no FROM (SELECT * FROM process_card_procedu...