显式转化
简单介绍TO_CHAR,TO_NUMBER,TO_DATE函数之间的联系与区别。
这三个函数之间的关系如下图所示:
TO_CHAR
T0_C ~~
TO_CHAR可以将数值格式、日期格式转化为字符串格式。
日期转字符串
日期格式有:
yyyy:完整年份(阿拉伯数字,1985)
mm:某月(阿拉伯数字,03)
dd:某天(阿拉伯数字,12)
year:年份(English,nineteen eighty-one)
month:完整月份(English,may)
mon:月份前三个字母
day:完整星期名称(tuesday)
dy:星期前三个字母(Tue)
HH24:MI:SS AM:(15:45:32 PM)
DD “of” MONTH:(12 of october)
DDSPTH:(fourteenth)
用法:to_char(hiredate,‘date_format’)
将日期按某格式输出,输出类型为字符串型
例:
select ename,to_char(hiredate,'yyyy-mm-dd day') //将员工入职日期按‘年份-月份-日期 星期’格式输出
from emp //从员工信息表中查找
where ename='KING'; //指定只看‘KING’员工
ENAME TO_CHAR(HIREDATE,'YYYY-M //输出结果
---------- ------------------------
KING 1981-11-17 tuesday
数字转字符串
数字格式:
9 :代表一个数字,输出时以真实结果输出
0 :将整数部分空缺项填“0”,例如:5000>>>0005000
$: 放置一个浮动的美元符号
L :放置一个浮动的本地货币符号(计算机默认语言所属国的货币符号)
. :打印小数点"."
, :打印一个逗号作为千位标识符
用法:to_number(number,‘format_num’)
将数字按某格式输出,输出类型为字符串型
select //将年薪以$999,999,999.00的格式输出数字
to_char((12*sal+nvl(comm,0))/12,'$999,999,999.00')
from emp;
TO_CHAR((12*SAL+ //输出结果
----------------
$800.00
$1,625.00
$1,291.67
$2,975.00
TO_NUMBER
TO_N ~~
用法:to_number(‘char’,‘number_format’)
解释:char为字符串,比如“$9845217”
numer_format为说明前面字符串的 “数字格式” ,比如“$9999999"
可以理解为“char”为穿上衣服的一个数值,而TO_NUMBER可以将char穿的那身衣服拔下来。同样对于char来说也是有格式要求,详见数字转字符串一节中介绍的数字格式。
举例:
SQL> select to_number('$45612378','$99999999') from dual; //执行该句
TO_NUMBER('$45612378','$99999999') //结果见下方
----------------------------------
45612378
SQL> select to_number('$4561,2378','$9999,9999') from dual; //又如
TO_NUMBER('$4561,2378','$9999,9999') //执行结果
------------------------------------
45612378
TO_DATE
TO_D ~~
用法:to_date(‘char’,‘date_format’)
解释:char为日期,比如“1987-03-24”
date_format为说明前面字符串的 “日期格式” ,比如“yyyy-mm-dd"
理解方式同TO_NUMBER,“char” 中内容为日期按照特定形式组成的字符串。
date_format说明前方字符串是什么格式
SQL> select to_date('1987-03-24','yyyy-mm-dd') from dual; //说明1987-03-24字符串是日期,其格式为'yyyy-mm-dd'
TO_DATE(' //结果为转换为日期(数据库默认可是,修改格式后其显示的格式不同)
---------
24-MAR-87
SQL> alter session set nls_date_format='yyyy-mm-dd day'; //修改日期显示格式
Session altered.
SQL> select to_date('1987-03-24','yyyy-mm-dd') from dual; //重新执行上一步的命令
TO_DATE('1987-03-24' //结果显示与上次不同,显示结果跟当前设置的日期格式有关系
--------------------
1987-03-24 tuesday