1 转换简述
数据可以从一种数据类型转换为其他数据类型。

2 转换类型
隐式转换:implicit data type conversion
由Oracle Server自动完成将一个数据转换为其它数据类型。
显式转换:explicit data type conversion
用户通过函数,显示地转换数据类型。
当然以上在转换过程中也要遵循转换规则。
尽管可以通过隐式转换将数据转换为另一种类型,但是推荐使用显示转换。
2.1 隐式转换
字符类型 varchar或char类型可以隐式的转换为数值或日期类型。
注意:只有当字符是有效的数值时,char才能成功转换为数值。
数值可以隐式转换为字符,日期可以隐式转换为字符。
2.2 显式转换
sql提供了三种函数将一种类型数据转换为另一种类型数据。
3 转换函数
3.1 to_char
to_char(date[,‘format_model’]) 这个格式模型必须使用单引号引起来,大小写敏感,可以包含任何有效的日期格式,fm消除填充空格或抑制前导零,与日期值之间用逗号分隔。
to_char将一个日期转换为format_model指定的字符类型,format_model指定了字符存储的日期格式。例如日期格式模型字符串‘11-Nov-2000’是’DD-Mon-YYYY’。可以使用to_char函数将一个日期以指定的格式输出。
如:输出Higgins的员工号,入职日期,且入职日期以MM/YY格式输出。
SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired
FROM employees
WHERE last_name = 'Higgins';
格式模型的元素:
显示时间的格式:HH24:MI:SS AM :比如 15:45:32 PM
增加个性化说明的字符串使用双引号引起来:DD “of” MONTH:比如 12 of OCTOBER
数字后缀拼出数字:ddspth: 比如 fourteenth
如:
SELECT last_name,TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE
FROM employees;
这个SQL语句显示了所有员工的姓名和入职日期。入职日期心类似于17 June 2003这样的格式显示。
SELECT last_name,
TO_CHAR(hire_date, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
FROM employees;
以上将入职日期以类似于“Seventeenth of June 2003 12:00:00 AM.”的格式输出。
TO_CHAR(number[, ‘format_model’])
将一个数值以字符格式输出,并且按照format model的格式显示。
格式元素:
9:代表一个数字
0:强制显示0
$:放置浮动美元符号
L:使用浮动本地货币符号
.:打印小数点
,:打印逗号作为千位指示符
如:以如下整数位长度最长为5位的格式,且显示千位分隔符逗号及小数分隔符’.’,输出员工的工资
SELECT TO_CHAR(salary, '$99,999.00') SALARY
FROM employees
WHERE last_name = 'Ernst';
Oracle服务器显示一串数字符号(#)来代替一个整数,这个整数的位数超过了格式模型中提供的位数
3.2 to_number
将一个字符串转换为数值格式输出。
TO_NUMBER(char[, ‘format_model’])
3.3 TO_DATE
将一个字符串转换为日期格式输出。
TO_DATE(char[, ‘format_model’])
如:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-yyyy')
FROM employees
WHERE TO_DATE(hire_date, 'DD-Mon-yy') < '01-Jan-90';
以上想要列出1990年之前入职的员工,第一个SQL以RR格式匹配的可以得到正确的结果,当年是21世纪,因为RR日期的规则,01-Jan-90是1990年,而yy格式DD-Mon-yy是2090年。
4 练习题
判断题:
TO_NUMBER函数可以将字符或日期类型的数据以一定格式转换为数值。
A 对
B 错
【答题小贴士】:
1、以墨天轮文章的形式解析题目并给出答案
2、将墨天轮文章链接发送到此文的评论区




