[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_NAMEHIREDATE
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';
SALARYSALARY
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_NAMETO_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_NAMETO_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

 

posted @ 2020-07-09 16:57  workingdiary  阅读(110)  评论(0)    收藏  举报