DATE数据类型
功能描述
date数据类型用于存储日期和时间信息,对于每一个date值:
- 展示格式为:YYYY/MM/DD,也可以是YYYY/MM/DD HH24:MI:SS
- 存储格式只有一种:YYYY/MM/DD HH24:MI:SS
- date类型的值在数据库图形界面中可以有不同的显示格式(具体格式由工具设置决定),但其实际存储格式只是其中一种,当只存储年月日时,date实际存储的是:年月日0时0分0秒,在图形界面中,其展示格式为:YYYY/MM/DD。
- date类型对插入带有毫秒的部分直接去除毫秒,不进行四舍五入。
- 支持date数据类型和to_char字符串的转换。
DATE类型的计算
date类型的数据相减,结果是number类型(保留小数),结果不含小数部分则展示为整数。
sysdate参与日期类乘法,结果返回数值类型。
示例
示例1:使用date数据类型。
1、创建测试表并插入数据。
CREATE TABLE t1(id int,col date,col1 timestamp);
INSERT INTO t1 SELECT 1,current_timestamp,current_timestamp FROM dual;
2、将date数据类型转换为to_char类型,并查询结果。
SELECT id,to_char(col,'yyyy-mm-dd hh24:mi:ss'),to_char(col1,'yyyy-mm-dd hh24:mi:ss.ff6') FROM t1;
返回结果为:
id | to_char | to_char
----+---------------------+----------------------------
1 | 2022-07-04 17:15:16 | 2022-07-04 17:15:16.174639
(1 row)
其中col字段去除毫秒,不会做四舍五入。
3、获取时间的年份。
SELECT to_char(col,'yyyy') AS nowyear FROM t1;
返回结果为:
--结果为当前年份。
nowyear
---------
2024
(1 row)
示例2: date类型减法(结果为number类型,由客户端控制保留几位小数)。
SELECT to_date('20220110 10:10:10','yyyymmdd hh24:mi:ss')-to_date('20220101 9:9:9','yyyymmdd hh24:mi:ss') res FROM dual;
返回结果为:
res
------------------
9.04237268518519
(1 row)
结果说明:
单位:天(day)。
小数计算方式:日期相差换算为秒数/(24*60*60)。该例中前后相差为9天零1小时零1分零1秒,则结果为9+(1*60*60+1*60+1)/(24*60*60)≈9.04237268518519,由客户端控制保留几位小数,如果客户端控制保留7位,则最终结果为9.04237269。
刚好为整数日时,显示结果不带小数部分。
示例3: 日期相减的差,再做乘法。
SELECT (to_date('20220110 10:10:10','yyyymmdd hh24:mi:ss')-to_date('20220101 9:9:9','yyyymmdd hh24:mi:ss'))*86400 AS res FROM dual;
返回结果为:
res
---------------------
781261.000000000416
(1 row)
示例4:sysdate参与日期类乘法,结果返回数值类型。
sysdate减去一个更早的时间,再乘以5。
SELECT (sysdate-to_date('2020-8-1 12','yyyy-mm-dd hh24'))*5 FROM dual;
返回结果为:
?column?
------------------
6925.59751157405
(1 row)
清理环境
DROP TABLE t1;