Oracle提供了3个转换函数来完成不同数据类型之间的显式转换。这3个显式转换函数为:
TO_CHAR
TO_NUMBER
TO_DATE
现在我们来分别介绍这3个转换函数
TO_CHAR(日期,‘fmt’):
该函数的这种格式把日期型数据转换成变长字符串,其中,fmt为日期模式。
例4-45
sQL> SELECT ename,TO_CHAR(hiredate,'DD/MM/YY')
2 FROM emp
3 WHERE hiredate LIKE '%82';
例4-45结果
ENAME TO_CHAR(HIREDATE
MILLER 23/01/82
其中例4-45中的'DD/MM/YY'为日期模式,它们必须用单引号括起来。常用的日期模式还有:
YYYY:完整的年份数字表示(如2001);
YEAR:年份的英文表示(如NINETEEN EIGHTY-SEVEN);
MM:用两位数字来表示月份;
MONTH:月份完整的英文表示;
DY:用3个英文字符的缩写来表示星期几;
DAY:星期几的完整的英文表示:
DD:几号的数字表示。
可以在日期中加入字符串,但必须用双引号括起来。您还可以使用SP和TH,它们分别为数字的英文表示和数字的序数表示。
例4-46
SQL> SELECT TO_CHAR(SYSDATE,'fmDD MONTH YEAR')
2 FROM dual;
例4-46结果
TO_CHAR(SYSDATE,'FMDDMONTHYEAR')
6 MAY TWO THOUSAND TWO
在这里的fm用来压缩前导零或空格。
下面给出一个比较实际的例子。为了能在一行中显示日期数据HIREDATE,可以使用例4-47的SQL*PLUS命令将HIREDATE的输出宽度加长为60个字符。
例4-47
SQL> col hiredate for a60
之后,可以使用例4-48的查询语句以得到员工的名字(Name),工资(Salary)和雇用日期(HIREDATE)的信息。
SQL> SELECT ename "Name",sal "Salary",
2 TO CHAR(hiredate,'fmDdspth"of"Month Year fmHH:MI:SS AM')HIREDATE
3 FROM emp;
例4-48结果
Name Salary HIREDATE
SMITH 800 Seventeenth of December Nineteen Eighty 12:00:00 AM
TO_CHAR(数字,‘fmt’):
■ 该函数的这种格式把数字型数据转换成变长字符串。其中,fmt为数字模式。常用的数字模式包括:
9:一位数字;
0:显示前导零;
$:显示美元号:
L:显示本地货币号;
.:显示小数点;
,:显示千位符;
MI:在数的右边显示减号;
PR:把负数用尖括号扩起来。
SQu>SELECT enme"Name",TO_CHAR(sa1*12, '$999,999.00') "AnnuaIsalaty"
2 FROM emp;
例4-49结果
Name Annua1saIary
SMITH $9,600.00
SQL> SELECT ename "Name",TO_CHAR(sa1*12, 'L99,999.00') "Annual Salary"
2 FROM emp;
例4-50结果
Name Annual Salary
RMB9,600.00 SMITH
如果实际数据的位数超过了您在格式语句中所提供的位数,Oracle Server 又如何处理呢?可以通过例4-51的查询语句来看到Oracle Server的处理方式。
例4-51
SQL> SELECT ename "Name",TO_CHAR(sa1*12, 'L9,999.00') "Annual Salary"
2 FROM emp;
例4-51结果
Name Annual Salary
SMITH RMB9,600.00
ALLEN #############
TO_NUMBER(字符串 [, ‘fmt]’):
该函数把字符串转换成数字。