前言 设置日期语言

 alter session set NLS_DATE_LANGUAGE='AMERICAN';alter session set NLS_DATE_LANGUAGE='SIMPLIFIED CHINESE';
--也可以这样写:to_date('2021-06-30 15:23:45','yyyy-mm-dd hh24:mi:ss',NLS_DATE_LANGUAGE='AMERICAN' ) 

可通过如下语句查看:

 select * from nls_session_parameters      select * from V$NLS_PARAMETERS  

一、日期格式

以 2021-06-30 15:36:23 为例

格式 类型 名称 示例
年(Year) yy two digits 两位年 显示21
yyy three digits 三位年 显示021
yyyy four digits 四位年 显示2021
月(Month) mm number 两位月 显示06
mon abbreviated 字符集表示 显示6月(若是英文版,显示Jun)
month spelled out 字符集表示 显示6月(若是英文版,显示June)
日(Day) dd number 当月第几天 显示30
ddd number 当年第几天 显示181
dy abbreviated 当周第几天缩写 显示星期三,若是英文版显示Wed
day spelled out 当周第几天全写 显示星期三,若是英语显示wednesday
d number 当周第几天,返回数字 显示4, 每周第1天是星期天
ddspth spelled out 当月第几天(英文显示) 显示thirtieth
Hour(时) hh two digits 12小时制 显示03
hh24 two digits  24小时制 显示15
Minute(分) mi two digits 60进制 显示36
Second(秒) ss two digits 60进制 显示23
Quarter(季度) Q digit 季度 显示2
当年第几周 WW digit 当年第几周(从年的第一天算7天为一周) 显示26
IW digit 年的自然周 显示26
当月第几周 W digit 当月第几周 显示5

注意:

1. WW 是从年的第一天算7天为一周,IW是自然周算的,可以看如下代码:

select to_char(to_date('2020-01-06','yyyy-mm-dd'),'IW')  from dual   --02select to_char(to_date('2020-01-06','yyyy-mm-dd'),'WW')  from dual  --01 

24小时格式下时间范围为: 0:00:00 - 23:59:59....      
        12小时格式下时间范围为: 1:00:00 - 12:59:59 ....

2. 一周内的第几天:‘D’ 没星期的第1天是‘星期日’

二、日期类型和字符类型转换函数 to_date,to_char

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

但是呢,to_date就要求转换的格式要和输入的字符型日期要对应,不然会报错,如下:

这个呢是因为少了时分秒了。

时间为null的用法 to_date(null)

NEXT_DAY(X,Y):用于计算X时间后第一个星期Y的时间。Y是一个字符串,表示用当前会话语言表示的一周中某一天的全称(如星期一、星期二等),也可以是数值。

TRUNC(X [,FORMAT]):截断日期,返回的是日期, FORMAT 中与周相关的有D,IW,WW,W,FMWW

--取周的开始时间和结束时间
SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') AS STARTDATE FROM DUAL;--本周周一
SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') + 6 AS ENDDATE FROM DUAL;--本周周日SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') - 7 AS STARTDATE FROM DUAL;---上周周一
SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') - 1  AS ENDDATE FROM DUAL;--上周周日

EXTRACT():从一个date或者interval类型中截取到特定的部分,

extract (    { year | month | day | hour | minute | second }    | { timezone_hour | timezone_minute }    | { timezone_region | timezone_abbr }    from { date_value | interval_value } )

oracle中extract()函数----用于截取年、月、日、时、分、秒 - 小强斋太 - 博客园 (cnblogs.com)

select  extract (year from sysdate) year, extract (month from sysdate) month, extract (day from sysdate) day from  dual; select extract (year from date '2015-05-04') year, extract (month from date'2015-05-04') month, extract (day from date '2011-05-04') day from dual;

从timestamp中获取年月日时分秒

select extract(year from systimestamp) year
,extract(month from systimestamp) month
,extract(day from systimestamp) day
,extract(minute from systimestamp) minute
,extract(second from systimestamp) second
,extract(timezone_hour from systimestamp) th
,extract(timezone_minute from systimestamp) tm
,extract(timezone_region from systimestamp) tr
,extract(timezone_abbr from systimestamp) ta
from dual

三、时间差

3.1 年份差(相差月数/12)

select ((months_between(TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2016-5-31','yyyy-mm-dd hh24:mi:ss')))/12)
As 相差年份 from dual;
--结果:2 
select trunc(months_between(sysdate, to_date('2017-01-01','yyyy-mm-dd')) / 12) from dual;
--结果:4
SELECT EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM TO_DATE('2017-01-01','YYYY-MM-DD')) YEARS FROM DUAL;
--结果:4 

3.2 月数差(months_between()函数)

--oracle两个日期的相差月数--
--1)月份都是最后一天,A日期 > B日期 ,返回整数 ---
select months_between(TO_DATE('2018-6-30','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
As 相差月份1 from dual;  --返结果:1--2)月份都是最后一天,B日期 > A日期 ,返回负数 ---
select months_between(TO_DATE('2018-4-30','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
As 相差月份2 from dual;  --f返回结果:-1--3)月份天数不一样,A日期 > B日期 ,返回带小数的数字---
select months_between(TO_DATE('2018-6-25','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
As 相差月份3 from dual;  --返回结果:0.8064516...

3.3 相差天数(两个日期相减,并用to_number()函数)

--Oracle中两个日期相差天数--
select TO_NUMBER(TO_DATE('2021-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
AS 相差天数 from dual;

3.4 相差小时数,分钟数,秒数(时制进行转换)

--Oracle中两个日期相差小时数--
select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24)
AS 相差小时数 from dual;--Oracle中两个日期相差分钟数--
select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60)
AS 相差分钟数 from dual;--Oracle中两个日期相差秒数--
select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60*60)
AS 相差秒数 from dual;

3.5 日期加法

sysdate+1 加一天
sysdate+1/24 加1小时
sysdate+1/(24*60) 加1分钟
sysdate+1/(24*60*60) 加1秒钟
类推至毫秒0.001秒

加法 
select sysdate,add_months(sysdate,12) from dual;        --加1年 
select sysdate,add_months(sysdate,1) from dual;        --加1月 
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1星期 
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1天 
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1小时 
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1分钟 
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1秒 
减法 
select sysdate,add_months(sysdate,-12) from dual;        --减1年 
select sysdate,add_months(sysdate,-1) from dual;        --减1月 
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1星期 
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1天 
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1小时 
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1分钟 
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1秒

3.6 获取两个日期之间的时间间隔,extract()函数是最好的选择

select
extract (day from dt2 - dt1) day,
extract (hour from dt2 - dt1) hour,
extract (minute from dt2 - dt1) minute,
extract (second from dt2 - dt1) second
from
(
select
to_timestamp ('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1,
to_timestamp ('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2
from
dual
)

3.7 获取日期中最晚的一个

 select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

3.8 查找月的第一天,最后一天

     SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_MonthFROM dual;

部分内容参照  ORACLE日期时间函数大全 - 阿郎 - 博客园 (cnblogs.com)

Oracle 日期时间函数大全相关推荐

  1. [转]ORACLE日期时间函数大全

    本文转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html ORACLE日期时间函数大全 TO_DATE格式(以时间:2007 ...

  2. Oracle 日期时间函数大全

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)             Year:               yy two digits ...

  3. ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digi

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)             Year:               yy two digits ...

  4. ORACLE日期时间函数大全(一)

    TO_DATE格式(以时间:2007-11-02 13:45:25为例)  Year:  yy two digits 两位年 显示值:07 yyy three digits 三位年 显示值:007 y ...

  5. oracle+5秒钟一个间隔,ORACLE日期时间函数大全 (二)

    13.年月日的处理 select older_date, newer_date, years, months, abs( trunc( newer_date- add_months( older_da ...

  6. oracle 选时间到五月,oracle日期时间函数小结

    oracle日期时间函数总结 经常写 sql 的同学应该会接触到一些 oracle 的日期时间函数, 例如: 财务软件或者人力资源软件需要按照每年, 每季度, 每月, 甚至每个星期来进行统计. 今天闲 ...

  7. php 中日期时间函数大全,PHP 中日期时间函数 date() 用法总结

    [导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它 ...

  8. MySQL日期时间函数大全(转)

    DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,--7=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03'); - ...

  9. oracle 取上季末日期,oracle 日期时间函数使用总结

    今天闲来没事, 特意从网上整理了一些资料, 以备日后查阅. 一.常用日期数据格式 1. 获取年的最后一位, 两位, 三位, 四位 select to_char(sysdate,'Y') from du ...

  10. oracle和MySQL的日期函数_mysql与oracle的日期/时间函数小结

    前言 本文的日期/时间全部格式化为"2016-01-01 01:01:01"形式: MONITOR_TIME为数据库表字段: 字符串与日期/时间相互转换函数 Oracle 日期/时 ...

最新文章

  1. 安装了email模块还是报错_Git windows安装及使用教程
  2. 暑假爆零欢乐赛SRM08题解
  3. vue --- v-text、v-show、v-if、v-else
  4. 15M安装包就能玩《原神》,带你了解云游戏背后的技术秘密
  5. windows中使用mysql配置my.ini时的坑
  6. CTS(8)---Android Google认证 -CTS认证问题小结
  7. HandlerInterceptor与MethodInterceptor
  8. OpenGIS--GDAL库学习笔记
  9. 多功能s扫描器 php168,S扫描器–速度惊人的扫描器
  10. javaweb框架学习开端
  11. 英国电信推出FTTP和G.fast新试点项目
  12. 如何使用PDF Expert将文本添加到PDF?
  13. c语言点餐怎么变量相加营业额,c语言点餐系统软件.docx
  14. golang实现图片颜色反转、图片灰度、缩放、转为字符画
  15. java nio 从内存读信息_JAVA使用NIO技术按行读写大文件并且完美解决中文乱码问题...
  16. JavaScript的json和Array及Array数组的使用方法
  17. C 语言 —— % 运算符
  18. linux安装应用程序dbd,Linux下安装DBI和DBD
  19. Echarts数据转换transform
  20. input框 限制输入数字或英文的正则表达式

热门文章

  1. MAC 设计师必备的设计绘图软件 推荐与下载
  2. 单片机编程软件很简单(11),Keil单片机编程软件在线调试
  3. 计算机教室网络布线费用,办公室网络布线价格是怎么预算的
  4. 《那些年啊,那些事——一个程序员的奋斗史》一
  5. oracle bpm 教学视频,Oracle BPM 官方文件摘录
  6. 区块链社会:解码区块链全球应用与投资案例
  7. 2007最新反病毒软件工具大集合
  8. 【Web文件上传下载】各种类型文件对应的content-type
  9. DISCUZ!论坛管理员无法登录后台的各种解决方法总结
  10. 《深入浅出统计学》笔记