类型转换函数

不同数据类型之间的转换


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> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值