Oracle中日期类型
DATE TYPE | DESCRIPTION |
---|---|
DATE | 包含日期和Time |
Timestamp | 时间戳 |
Timestamp with time ZONE | 带时区的时间戳格式 |
oracle数据库是以固定的7bytes空间存储时间格式的数据,包含了纪元,年,月,日,时,分,秒。
一 Date
SELECT SYSDATE FROM DUAL
--2019-12-31 13:35:21
1. format
利用TO_CHAR()函数
利用TO_CHAR()函数可以将时间格式按需求修改,修改后数据类型为string
EX:
SELECT TO_CHAR(SYSDATE,'FMMonth DD,YYYY') FROM DUAL
--December 31,2019
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL
--2019-12-31 14:04:58
SELECT TO_CHAR(SYSDATE-3,'YYYY-MM-DD HH24:MI:SS') FROM DUAL
--2019-12-28 14:05:34
SELECT TO_CHAR(SYSDATE-INTERVAL'7'MINUTE,'yyyy-mm-dd hh24:mi:ss') FROM DUAL
日期时间间隔操作
--当前时间减去7分钟的时间
select sysdate,sysdate - interval ’7’ MINUTE from dual
--当前时间减去7小时的时间
select sysdate - interval ’7’ hour from dual
--当前时间减去7天的时间
select sysdate - interval ’7’ day from dual
--当前时间减去7月的时间
select sysdate,sysdate - interval ’7’ month from dual
--当前时间减去7年的时间
select sysdate,sysdate - interval ’7’ year from dual
2 将字符串转化为时间格式
利用TO_DATE()函数实现,字符串的格式和后面format要一致
SELECT TO_DATE('August 01,2019','MONTH DD,YYYY') FROM dual
--2019-08-01 00:00:00
SELECT TO_DATE('2019-08-01 15:00:00','YYYY-MM-DD HH24:MI:SS') FROM dual
--在oracle中常见的时间存储还有TIMEKEY,20位的字符串:20190212201859000091,可以存储更加精确的时间,
--在使用时直接截取相应位数即可
SELECT TO_DATE('20190801150000','YYYYMMDDHH24MISS') FROM DUAL
日期格式参数含义说明
D 一周中的星期几
DAY 天的名字,使用空格填充到9个字符
DD 月中的第几天
DDD 年中的第几天
DY 天的简写名
IW ISO标准的年中的第几周
IYYY ISO标准的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最后三位,两位,一位
HH 小时,按12小时计
HH24 小时,按24小时计
MI 分
SS 秒
MM 月
Mon 月份的简写
Month 月份的全名
W 该月的第几个星期
WW 年中的第几个星期
二 TIEMSTAMP
timestamp(时间戳)也可以存储时间,与DATE 只能精确到ss级别不同的是,timestamp可以更为精确到fractional seconds。
fractional_seconds_precision定义秒的分数部分的位数,0-9(最小可以到nanosecond),默认值是6.
SELECT LOCALTIMESTAMP FROM DUAL
--2019-12-31 16:12:19
看起来和DATE没什么差别,但是当我们用TO_CHAR()时,就不一样了
SELECT TO_CHAR(LOCALTIMESTAMP(8)) FROM DUAL
-- 31-DEC-19 04.08.31.20800000 PM
其实我们可以查看timestamp 默认格式
SELECT VALUE
FROM "V$NLS_PARAMETERS"
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT'
--DD-MON-RR HH.MI.SSXFF AM
当我们想要固定格式时,仍可以用TO_CHAR()函数进行转化
SELECT to_char(LOCALTIMESTAMP(8),'yyyy-mm-dd hh24:mi:ss') FROM DUAL
--2019-12-31 16:18:09
与date类似,我们仍然可以将string转化为timestamp,此时采用的是TO_TIMESTAMP()函数
SELECT TO_TIMESTAMP('03-AUG-17 11:20:30.45 AM') FROM dual
--2017-08-03 11:20:30
参考:
https://www.w3school.com.cn/sql/sql_datatypes.asp
https://www.oracletutorial.com/plsql-tutorial/plsql-data-types/
https://www.oracletutorial.com/oracle-basics/oracle-timestamp/
https://www.oracletutorial.com/oracle-basics/oracle-date/
https://www.oracletutorial.com/oracle-basics/oracle-interval/
https://www.cnblogs.com/fmxyw/archive/2008/08/26/1276850.html