类型转换函数

来源:互联网 发布:生辰八字起名软件下载 编辑:程序博客网 时间:2024/06/12 21:30
不同数据类型之间的转换


varchar2 字符
number  数值
date


to_char to_number to_date


在赋值语句中数据类型会隐式转换,隐式转换应当尽量避免,因为写出来的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(number)
为了格式化货币显示样式
'3984738'  
to_char(number,'L999,999.99','NLS_CURRENCY=¥')

to_char(date)
为了格式化日期显示样式
to_char(date,'FORMAT')
to_number(char)
char必须在number允许的范围之内 比如a就不能转成number

to_date('1987-04-19','YYYY-MM-DD')
很常用
录入时间类型时 不能直接输入 只能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本地货币符号
.小数点
,千位符


idle> select to_char(sal*12,'$99,999.99') from emp where ename ='SCOTT';

TO_CHAR(SAL
-----------
 $36,000.00

idle> 
SQL> select to_char(sal*12,'L99,999.00','NLS_CURRENCY=RMB') from emp where ename ='SCOTT';

TO_CHAR(SAL*12,'L99,
--------------------
RMB36,000.00

SQL> 
SQL> select to_char(sal*12,'L99,999.00','NLS_CURRENCY=¥') from emp where ename ='SCOTT';

TO_CHAR(SAL*12,'L99,
--------------------
        ¥36,000.00

SQL> 





to_number('字符串','数字格式')
字符串一定要符合数字的格式
idle> select to_number('678.88','9999999.99') from dual;

TO_NUMBER('678.88','9999999.99')
--------------------------------
  678.88

idle> 

to_char 还可以将10进制数转换成16进制数
idle> select to_char(10,'xxxx') from dual;

TO_CH
-----
    a

idle> 
to_number 也可以将16进制转换成10进制

idle> select to_number('a','xxxx') from dual;

TO_NUMBER('A','XXXX')
---------------------
   10

idle> 

TO_DATE('字符串','日期格式')
字符串一定要符合日期格式

idle> select to_DATE('2010-10-10 20:44:37','YYYY-MM-DD HH24:MI:SS') from dual;

TO_DATE('2010-10-10
-------------------
2010-10-10 20:44:37

idle> 

原创粉丝点击