Oracle处理varchar2类型排序问题

    开发新项目遇到一个问题,Oracle数据库有张表有个专门用来排序的字段SN的数据类型是varchar2的,当用这个字段进行排序的时候虽然SN中存入的数据都是数字,可是由于是varchar2类型的形成实际排序的时候不论数字有几位只会比较第一位的大小进行排序。sql

    例如:数据库

    这里有四条数据以下咱们进行排序                                               这个是咱们须要的排序格式:函数

          

    可是使用SELECT * FROM TEST_TABLE ORDER BY SN;排序出来缺是这样的:3d

    这是由于Oracle在比较varchar2的时候只会讲其第一位比较,若是第一位相同再比较后面的位数,因此形成了上面的缘由,咱们能够将其转换为数字类型进行排序。具体有一下方式:code

    1、使用CAST函数    语法:cast( 列名/值 as 数据类型 )blog

    Oracle的CAST能够将列字段类型转化成对应类型的函数。可是这里必定要记住,咱们这里若是想让SN字段varchar2转化为int类型,SN必须为全数字字符串,若是SN中含有除数字外的其它字符SQL会报错。排序

SELECT * FROM TEST_TABLE ORDER BY CAST(SN AS int);

    2、使用TO_NUMBER    语法:to_number(列名/值)开发

    Oracle的TO_NUMBER函数是将字段类型转化为数字类型,和CAST同样,这里to_number里面的子端不论为何类型可是必须为数字,若是含有其它的字符也会报错。字符串

SELECT * FROM TEST_TABLE ORDER BY TO_NUMBER(SN);
相关文章
相关标签/搜索