開發新項目遇到一個問題,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);