和其他的關係型資料庫一樣,oracle中也能進行一些隱式的資料轉換,這對我們寫SQL語句有非常用,我們可以不必麻煩地手動轉化很多類型的字元。雖然前面我們介紹了一些使用例如to_char,to_date的函數進行強制轉換的方法,但是隱式轉換也還是不錯的。
Oracle可以隱式地進行一些變數類別之間轉化,例如從字串轉換到數值,看下面的例子。
SQL> select ename,sal from emp where sal = ‘1100′;
ENAME SAL
——————– ———-
SMITH 1100
ADAMS 1100
這裡用了對員工的工資進行了選擇,我們明知道員工的工資是數值型的,但我們故意把他寫成了字串型的。結果oracle仍然得到了正確的結果。這說明oracle進行了隱式的從字串到數值直接的轉換。
再比如下面的例子。
SQL> Select last_day(’26-4月 -08′) from dual;
LAST_DAY(’
———-
30-4月 -08
這裡我們的last_day函數本來是需要提供一個日期類型的參數,我們故意提供了一個字串類型的參數。但oracle仍然給我們返回了正確的結果,這說明oracle內部進行了從字串到日期類型的隱式轉換。
學要說明的是,如果這個例子在你的機器上沒有成功的執行,那很又能是你的預設日期格式和這裡的不同,如果你不知道你的日期格式的話,你可以用select sysdate from dual 這條SQL語句返回的結果來查看你的機器到底是什麼日期格式。一般這個和NLS_lang參數的值有關
這兩個例子都說明了oracle內部確實能進行某些隱式的函數轉換。下面是oracle中隱式轉換的一般情況。
從 |
到 |
Varchar2 or Char |
Number |
Varchar2 or Char |
Date |
Number |
Varchar2 |
Date |
Varchar2 |
需要注意的就是從Varchar2、char到date的隱式轉換過程中,必須保證其格式是原生預設時間格式。
除了隱式轉換以外,oracle還提供了更為靈活的資料類型的顯示轉換,這種轉換方式更為靈活。