概述
Oracle将日期和时间合并在了一起,因此DATE类型包含了年月日以及小时,分钟,和秒。DATE跟其他的内置类型像是INT一样使用。
DATE插入问题
可以使用默认的日期格式进行DATE类型数据的插入,也可以通过函数TO_DATE进行自定义的格式转换。
可以通过下方语句查询默认的日期格式
select * from v$nls_parameters where parameter like '%DATE%';
查询结果包括了默认的日期格式和数据库的语言环境
当然也可以更改系统默认的日期格式
alter session set NLS_DATE_FORMAT='yyyy/mm/dd';
上图查询结果所示数据库的语言环境是简体中文 并且默认格式为"DD-MON-RR"
常用的日期格式字符串如下所示
那么插入语句应当如下所示
INSERT INTO test VALUES('20-5月-12');
如果使用英文的月份 可能会导致错误ORA-01843: 无效的月份
INSERT INTO test VALUES('20-may-12');
下面说明使用自定义格式的插入方法 TO_DATE的用法是TO_DATE(日期字符串,日期格式字符串)
INSERT INTO test VALUES(to_date('2019-07-01','yyyy/mm/dd'));
DATE格式问题
当DATE类型的值需要被展示时,Oracle会将值转换为可打印字符串。该转换由TO_CHAR函数完成,如果不想按照固定的格式打印,可以自定义打印的格式。
使用自定义格式如下所示 TO_CHAR(日期字符串,日期格式字符串)
SELECT to_char(BIRTHDAY,'yyyy') FROM MEMBER1;
查询出生日期 转换为年份之后输出
当前时间
内置的SYSDATE会返回一个代表系统当前时间的DATE类型值。
SELECT to_char(SYSDATE,'yyyy//mm/dd') as "Current Time" FROM dual;
tips:默认情况下,Oracle是不区分大小写的,但是如果使用双引号那么就会区分大小写。例如上面的列别名。
DATE的一些操作
可以使用=,!=,>等等这些比较操作符进行DATE的比较,
可以将两个日期相减 结果是代表两个日期之间天数的Float类型的值。结果可能会含有分数因为DATE可能含有时间。但是两个日期之间的相加,相乘,相除是不支持且没有意义的。
select to_date('2019-07-02','yyyy/mm/dd')-to_date('2019-07-01','yyyy/mm/dd') from dual;
计算两个日期之间相差的天数
select months_between(to_date('2019-07-02','yyyy/mm/dd'),to_date('2019-07-01','yyyy/mm/dd') )from dual;
计算两个日期之间相差的月数 如果天数不满一个月 那么按照一月31天计算 按照小数进行展示可以将日期加上或者减去一个常量时间。
select sysdate+1 from dual;
查询当前时间+1天的时间
此外一旦将DATE类型数据转换为字符串,那么就可以进行一些字符串的相关操作。
select * from MEMBER1 where to_char(BIRTHDAY,'yyyy') like '1997';
找出年份为1997年的数据