假设列名为No,类型为varchar2,100行数据里分别存放着W1~W100。
如果查询语句为:
select * from table order by No
会得到按W1,W10,W100,W11,W12,……,W2,W20,W21,……的排序。
如果我们想得到按照数字大小来排序怎么做呢?
一个解决方法是截去W,并将剩下的数字(注意:此时为varchar2类型)转变为number类型,再对其排序。
这里首先介绍一下substr函数。
substr
Oracle中的截取字符串函数。
语法如下:
substr( string, start_position, [ length ] )
参数分析:
string
字符串值
start_position
截取字符串的初始位置, Number型,start_position为负数时,表示从字符串右边数起。
length
截取位数,Number型
其中,length为可选,如果length为空(即不填)则返回start_position后面的所有字符。
意思就是:
从start_position开始,取出length个字符并返回取出的字符串。
其中string参数那也可以使用列名,表示对一个列的内容进行全部截取。于是我们可以这样排序:
order by to_number(substr(No,2))
这样就做到按数字大小进行排序了。
欢迎大家访问我的独立技术博客 道合|SameIdeal.com