Oracle有三种最基本的数据类型,即字符型、数字型、日期型。
Oracle 数据类型的隐式转换
现在在oracle数据库中建立一个user_info
表,对应代码如下:
CREATE TABLE user_info( user_id NUMBER(2) PRIMARY KEY,user_name VARCHAR2(14),user_birthday DATE);
赋值操作
在赋值操作的情况下,我们有如下四种隐式类型转换的情况:
字符串转化为数字
select '12'+'8' from dual;
-- 20
字符串转化为日期
INSERT INTO USER_INFO (user_id,user_name,user_birthday) VALUES (1,'Tom','26-1月-08');
数字类型转换为字符串
INSERT INTO USER_INFO (user_id,user_birthday) VALUES (2,111,last_day('26-4月-08'));
说明:数字类型的111
被转化为字符串插入到user_info
表的user_name
属性中去!
日期类型转化为字符串类型
INSERT INTO USER_INFO (user_id,user_birthday) VALUES (3,sysdate,sysdate+1);
说明:代码中的sysdate
被转化为字符串赋值到了user_name
属性中!
表达式比较操作
在表达式的比较操作过程中,我们可以进行如下两种隐式转换操作:
字符串转化为数字
select 1+1 from dual where '2' > 1;
-- 2
字符串转化为日期类型:
select 1+1 from dual where sysdate < '26-4月-19';
-- 2
但是一般常用的还是类型的显式转换!
Oracle 数据类型的显式转换
首先,我们常用的显式类型转换的函数与如下三种:
to_char()
:转化为字符串类型
to_number()
:转化为数字类型
to_date()
:转化为日期类型
我们用如下的图来说明则三个函数的使用场景:
TO_CHAR() 函数:日期转化为字符串
TO_CHAR(date,‘format_model’) ;
如上的format_model有如下格式:
日期格式化元素 | 意义 |
---|---|
YYYY | 4位数字表示的年份 |
YEAR | 英文描述的年份 |
MM | 2位数字表示的月份 |
MONTH | 英文描述的月份 |
MON | 三个字母的英文描述月份简称 |
DD | 2位数字表示的日期 |
DAY | 英文描述的星期几 |
DY | 三个字母的英文描述的星期几简称 |
HH24:MI:SS AM | 时分秒的格式化 |
DDspth | 英文描述的月中第几天 |
fm | 格式化关键字,可选 |
还是以上面的user_info
数据库为例,我们看下面几个例子:
SELECT to_char(u.user_birthday,'YYYY-MM-DD HH24:MI:SS AM') FROM user_info u WHERE u.user_id = 3 --查找结果:2017-07-20 19:25:19 下午
TO_CHAR() 函数:数字转化为字符串
TO_CHAR(number,‘format_model’) ;
其中format_model有如下格式:
数字格式化元素 | 意义 |
---|---|
9 | 表示一个数字 |
0 | 强制显示0 |
$ | 放一个美元占位符 |
L | 使用浮点本地币种符号 |
. | 显示一个小数点占位符 |
, | 显示一个千分位占位符 |
我们看下面几个例子的学习怎样使用这个函数:
alter session set NLS_CURRENCY = '¥';
SELECT to_char(1245562,'L99,999,999.00') FROM dual;
--查找结果:¥1,245,562.00
alter session set NLS_CURRENCY = '$';
SELECT to_char(1245562,999.00') FROM dual;
--查找结果:$1,562.00
TO_NUMBER() 函数:字符串转化为数字
TO_NUMBER(char[,‘format_model’]) ;
最简单的应用就是:
SELECT to_number('4456') FROM dual;
--4456
当然可以干一些较为复杂的转换,看如下代码:
SELECT to_number('$4,456,455.000','$9,999.999') FROM dual;
--查找结果:4456455
说明:以上面的语句为例:
我们的format_model要与待转化的数字对应好,且其位数不能小于它。
如上我们会发现$9,999.999
与$4,455.000
是意义对应的。
也就是说上例中的format_model可以为:$999,999.999
,$9,999.999
,但是不能为:$999,999.999
或者$9,999.999
等等。
TO_DATE()函数:字符串转化为日期
TO_DATE(char[,‘format_model’])
较为常用的用法如下:
SELECT to_date('2011-02-22','YYYY-MM-DD') FROM dual;
--2011/2/22