開發新項目遇到一個問題,Oracle數據庫有張表有個專門用來排序的字段SN的數據類型是varchar2的,當用這個字段進行排序的時候雖然SN中存入的數據都是數字,但是因爲是varchar2類型的造成實際排序的時候不論數字有幾位只會比較第一位的大小進行排序。
例如:
這裏有四條數據如下我們進行排序 這個是我們需要的排序格式:
但是使用SELECT * FROM TEST_TABLE ORDER BY SN;排序出來缺是這樣的:
這是因爲Oracle在比較varchar2的時候只會講其第一位比較,如果第一位相同再比較後面的位數,所以造成了上面的原因,我們可以將其轉換爲數字類型進行排序。具體有一下方式:
一、使用CAST函數 語法:cast( 列名/值 as 數據類型 )
Oracle的CAST可以將列字段類型轉化成對應類型的函數。但是這裏一定要記住,我們這裏如果想讓SN字段varchar2轉化爲int類型,SN必須爲全數字字符串,如果SN中含有除數字外的其它字符SQL會報錯。
SELECT * FROM TEST_TABLE ORDER BY CAST(SN AS int);
二、使用TO_NUMBER 語法:to_number(列名/值)
Oracle的TO_NUMBER函數是將字段類型轉化爲數字類型,和CAST一樣,這裏to_number裏面的子端不論爲什麼類型但是必須爲數字,如果含有其它的字符也會報錯。
SELECT * FROM TEST_TABLE ORDER BY TO_NUMBER(SN);