Oracle 日期类型相关

1,627 阅读3分钟

概述

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年的数据


参考链接infolab.stanford.edu/~ullman/fcd…