oracle中的日期转化

Oracle中日期类型

DATE TYPEDESCRIPTION
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 - interval7MINUTE from dual
--当前时间减去7小时的时间
select sysdate - interval7hour from dual
--当前时间减去7天的时间
select sysdate - interval7day from dual
--当前时间减去7月的时间
select sysdate,sysdate - interval7month from dual
--当前时间减去7年的时间
select sysdate,sysdate - interval7year 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值