oracle:时间数据的处理

刷题过程中,受时间数据所困.为此,整理出以下关于时间操作的基本知识点,受益匪浅.真香,原来还可以这么搞⛏!!!



日期函数

系统时间:sysdate 无参数 (默认格式:DD(日)-Mon(月)-RR(2位年))

date的加减
select sysdate -1 from dual 
----结果减一天,也就24小时 
select sysdate-(1/2) from dual 
-----结果减去半天,也就12小时 
select sysdate-(1/24) from dual 
-----结果减去1 小时 
select sysdate-((1/24)/12) from dual  
----结果减去5分钟 
 select sysdate from dual;--结果:26-3月 -20

其它:ORACLE时间函数(SYSDATE)深入理解
时间戳:systimestamp

SQL> select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
26-3-20 09.20.03.403000 上午 +08:00
时间戳与date型数据之间的关系

-- 字符型转成time_stamp

select to_timestamp('01-10月-08 07.46.41.000000000 上午','dd-MON-yy hh:mi:ss.ff AM')  
from dual;  
-- timestamp转date
 
select cast(to_timestamp('01-10月-08 07.46.41.000000000 上午','dd-MON-yy hh:mi:ss.ff AM') as date) timestamp_to_date
from dual; 

-- date转成timestamp

select cast(sysdate as timestamp) date_to_timestamp  
from dual;  
-- 获取系统当前时间戳

select systimestamp from dual;  

-- 时间戳的差值:

select systimestamp-systimestamp from dual;  
select sysdate-sysdate from dual;  

SQL> select systimestamp-systimestamp from dual;

SYSTIMESTAMP-SYSTIMESTAMP
---------------------------------------------------------------------------
+000000000 00:00:00.000000

SQL> select sysdate-sysdate from dual;

SYSDATE-SYSDATE
---------------
              0

日期操作

1.add_months(date,i)函数:在指定日期上添加月份,i位任意整数;
add_months
2.next_day(date,char):char的星期*,则返回date指定日期的下周*是哪天;
nex_day
3. last_day(date) 返回月的最后一天;
last_day
4. months_between(date1,date2):表示两个日期之间相隔的月份;

months_between
5. 间隔的天数:两个日期直接相减
date_
6. extract(date from datetime)提取date
extract

转换函数

1.日期转换为字符的函数:to_char(date[,fmt[,params]])
params:YY YYYY year MM Month DD Day HH24 HH12 MI SS
如: select to_char(sysdate,'YYYY-MM-DD HH12:Mi:SS') from dual;
2. 字符转换成日期函数:to_date(char[,fmt[,params]]):
如:select to_date('2020-3-12','yyyy-mm-dd') from dual;
3.数字转换成字符函数to_char(number[,fmt]):
其中:fmt格式设置:
|

fmt描述
9类似于占位符,用来显示数字,并忽略前面0
0显示数字,位数不足用0补齐
.或D显示小数点
,或G显示千位符
$美元元符号
S加正负号(前后都可以)

案例:
正负号
4.字符转数字:to_number(char[,fmt])
to_number
结论:***to_char支持datetimestamp数据***

to_char信息提取总结
fmt信息
‘Y{num}’年的最后num
‘Q’当前日期所在的季度
‘MM’当前日期所在的月份,如2020-03-12,提取的结果为03
‘Month’当前日期所在的月份,如2020-03-12,提取的结果为3月
‘RM’当前日期所在的月份的罗马表示
‘WW’当前日期属于当年的第几周
‘DDD’当前日期属于当年的第几天
‘DD’当前日期属于当月的第几天
‘D’当前日期属于一周的第几天 ,注意其与星期的区别,其是从星期日开始算
‘DY’获取中文的星期
‘HH’获取12小时制的小时
‘HH24’获取24小时制的小时
trunc函数

格式:trunc(date[,fmt]),仅支持date数据,不支持timestamp.

fmt描述
‘year’当前年的1月1日,无时分秒
month返回当月的1日
day返回当前星期的星期天
Q当前季度的1日
‘D’当前星期的星期天
round 获取到最近的日期

基本格式:round(d,[fmt])

fmt描述
year舍入最近的年
month最近的月
day最近的星期日

案例:

select sysdate today,
  round(sysdate,'year') year,
  round(sysdate,'month') month,
  round(sysdate,'day') day,
  round(sysdate,'D') day2,
  round(sysdate,'Q') quarter,
  round(sysdate,'WW') week 
from dual;

结果:
结果

应用

案例:按时间分组讨论
Oracle数据库按时间进行分组统计数据的方法


参考:
Oracle日期函数,Oracle数据库开发利器之函数教程-慕课网
oracle 日期时间函数使用总结_oracle_脚本之家
Oracle计算时间差常用函数_oracle_脚本之家
ORACLE时间函数(SYSDATE)深入理解_oracle_脚本之家
oracle日期时间型timestamp的深入理解_oracle_脚本之家

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值