不同資料類型之間的轉換
在指派陳述式中資料類型會隱式轉換,隱式轉換應當盡量避免,因為寫出來的SQL難理解,隨著時間流逝自己都很難理解
特別是嵌入到大型程式中時,另外,Oracle升級會修改隱式轉換的規則,這會使程式移植遇到問題.
尤其是索引列不能使用隱式轉換 那樣就不走索引了
指派陳述式中oracle的自動轉換規則:
1.將變長字元型(varchar2)或定長字元型(char)轉換成數值型(number)
2.將變長字元型(varchar2)或定長字元型(char)轉換成日期型(date)
3.將數值型(number)轉換成變長字元型(varchar2)
4.將日期型(date)轉換成變長字元型(varchar2)
運算式中oracle的自動轉換規則:
1.將變長字元型(varchar2)或定長字元型(char)轉換成數值型(number)
2.將變長字元型(varchar2)或定長字元型(char)轉換成日期型(date)
轉換成功的條件:
在將字元型資料轉換成數字型時,要保證字元型資料為有效數.
在將字元型資料轉換成日期型時,要保證字元型資料位元有效日期.
SQL> select ename,sal from emp where sal > '4000';
ENAME SAL
---------- ----------
KING 5000
SQL> 拿字元和數字比較 oracle自動將字串轉成了數字
SQL> select ename,hiredate from emp where hiredate = '17-NOV-81';
ENAME HIREDATE
---------- ------------------
KING 17-NOV-81
SQL> 拿字串充當日期 oracle自動將字串轉成了日期
不能直接轉換
數值型和日期型之間不能直接轉換,必須將其中之一先轉換為字元型,之後再轉換為另一種類型
顯示轉換函式:
to_char
to_number
to_date
to_char(日期,'fmt')
將日期型資料轉換成字變長字串.fmt為日期格式
日期格式必須用單引號擴起來
常用的時間格式:
YYYY 數字年
YEAR 英文年
MM 數字月
MONTH 英文月
DY 縮寫的星期
DAY 完整的星期
DD 數字日期
hh 12小時
HH24 24小時
MI 分鐘
SS 秒
idle> select ename,to_char(hiredate,'YYYY-MM-DD') from emp where ename='SCOTT';
ENAME TO_CHAR(HI
---------- ----------
SCOTT 1987-04-19
idle> 將日期型轉換成了字元型
to_char(數字,'fmt')
將數字轉換成變長字串.fmt為數字格式
9 一個數字 給定的9個數不足 會顯示#
0 顯示前置0
$ 貨幣符號
L 本地貨幣符號
. 小數點
, 千位符