[Oracle数据库学习]三、单行函数(2)
D1
转换函数
数据类型转换
隐性数据类型转换
显性数据类型转换
隐式数据类型转换
Oracle自动完成的转换
| 源数据类型 | 目标数据类型 |
| VARCHAR2 or CHAR | NUMBER |
| VARCHAR2 or CHAR | DATE |
| NUMBER | VARCHAR2 |
| DATE | VARCHAR2 |
表达式计算中,Oracle自动完成下列转换:
| 源数据类型 | 目标数据类型 |
| VARCHAR2 or CHAR | NUMBER |
| VARCHAR2 or CHAR | DATE |
TO_CHAR函数
转换日期格式
TO_CHAR(date, 'format_model')
要求:
1)格式必须包含在单引号中且大小写敏感,可以使用任意有效的日期格式;可以使用fm去掉多余的空格或者前导零;
2)与日期用逗号隔开。
format_model的元素
日期格式的元素
| 元素 | 示例 |
| YYYY | 2004 |
| YEAR | TWO THOUSAND AND FOUR |
| MM | 02 |
| MONTH | JULY |
| MON | JUL |
| DY | MON |
| DAY | MONDAY |
| DD | 02 |
时间格式的元素
| 元素 | 说明 |
| HH | 小时 |
| MI | 分 |
| SS | 秒 |
| AM | 上午/下午 |
时间格式
HH24:MI:SS AM 示例:16:59:01 PM
使用双引号向日期中添加字符
DD "of" MONTH 示例:12 of OCTOBER
日期在月份中的位置
ddspth 示例:third
SELECT employee_name,TO_CHAR(hire_date, 'fmDD Month YYYY')AS HIREDATE FROM employees;
| EMPLOYEE_NAME | HIREDATE |
|---|---|
| Alice | 15 November 2007 |
| Bob | 10 March 2017 |
| Cindy | 15 April 2010 |
| Donald | 5 January 2019 |
| Elsa | 13 November 2007 |
注:'fmDD Month YYYY'中的"fm"表示去除日期前面的0。
转换数字格式
TO_CHAR(number, 'format_model')
| 常用格式 | 说明 |
| 9 | 数字 |
| 0 | 零 |
| $ | 美元符 |
| L | 本地货币符号 |
| . | 小数点 |
| , | 千位符 |
SELECT salary, TO_CHAR(salary, '$99,999.00') "SALARY" FROM employees WHERE employee_name = 'Bob';
| SALARY | SALARY |
|---|---|
| 5000 | $5,000.00 |
TO_NUMBER函数
TO_NUMBER(char[, 'format_model'])
将字符串转为数字格式。
TO_DATE函数
TO_DATE(char[, 'format_model'])
将字符串转为日期格式。
RR 日期格式
当前的年份:0–490–4950–9950–99The return date is in the current centuryThe return date is in the century after the current oneThe return date is in the century before the current oneThe return date is in the current century
| 当前年 | 日期 | RR 格式 | YY 格式 |
| 1995 | 27-OCT-95 | 1995 | 1995 |
| 1995 | 27-OCT-17 | 2017 | 1917 |
| 2001 | 27-OCT-17 | 2017 | 2017 |
| 2001 | 27-OCT-95 | 1995 | 2095 |
RR日期格式的规则:
| 当前年 |
指定年 0-49 |
指定年 50-99 |
| 0-49 | 返回当前所处的世纪的日期 | 返回上一个世纪的日期 |
| 50-99 | 返回下一个世纪的日期 | 返回当前所处的世纪的日期 |
使用RR日期格式查找雇佣日期在1990年之前的员工,在1999或现在使用下面的命令会产生相同的结果:
SELECT employee_name, TO_CHAR(hire_date, 'DD-Mon-YYYY') FROM employees WHERE hire_date < TO_DATE('01-Jan-99', 'DD-Mon-RR');
| EMPLOYEE_NAME | TO_CHAR(HIRE_DATE,'DD-MON-YYYY') |
|---|---|
| Elsa | 13-Nov-1998 |
但如果使用YY格式,则会得到不一样的结果(当前为2020年):
SELECT employee_name, TO_CHAR(hire_date, 'DD-Mon-YYYY') FROM employees WHERE hire_date < TO_DATE('01-Jan-99', 'DD-Mon-YY');
| EMPLOYEE_NAME | TO_CHAR(HIRE_DATE,'DD-MON-YYYY') |
|---|---|
| Alice | 15-Nov-2007 |
| Bob | 10-Mar-2017 |
| Cindy | 15-Apr-1999 |
| Donald | 05-Jan-2019 |
| Elsa | 13-Nov-1998 |
总结:
1)格式转换有隐式转换和显式转换;
2)显式转换的函数:TO_CHAR、TO_NUMBER、TO_DATE
欢迎大家评论交流,发现博文中存在的问题一定要留言哦

浙公网安备 33010602011771号