首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

oracle日期函数

2023-11-09 来源:花图问答

一、常用日期数据格式

 

1. 获取年的最后一位, 两位, 三位, 四位 

技术分享技术分享
  select to_char(sysdate,‘Y‘) from dual; -- 获取年的最后一位
技术分享技术分享
  select to_char(sysdate,‘YY‘) from dual; -- 获取年的最后两位
技术分享技术分享
  select to_char(sysdate,‘YYY‘) from dual; -- 获取年的最后三位
技术分享技术分享
  select to_char(sysdate,‘YYYY‘) from dual; -- 获取年的最后四位
技术分享

 2. 获取当前季度 select to_char(sysdate,‘Q‘) from dual; -- 1 ~ 3月为第一季度, 2表示第二季度。

 3. 获取月份数 select to_char(sysdate,‘MM‘) from dual; -- 五月为05 4. 获取月份的罗马表示 select to_char(sysdate,‘RM‘) from dual; -- 五月为V 5. 获取用9个字符长度表示的月份名

select to_char(sysdate,‘Month‘) from dual; -- 五月为5月 6. 获取当年第几周 select to_char(sysdate,‘WW‘) from dual; -- 2014年5月20日为2014年第20周 7. 获取本月第几周 select to_char(sysdate,‘W‘) from dual; -- 2014年5月20日为5月第3周 8. 获取当年第几天 select to_char(sysdate,‘DDD‘) from dual; -- 2014年5月20日为2014年第140天 9. 获取当月第几天 select to_char(sysdate,‘DD‘) from dual; -- 2014年5月20日为5月第20天 10. 获取一周第几天 select to_char(sysdate,‘D‘) from dual; -- 2014年5月20日为一周第三天( 从周日算起 ) 11. 获取中文的星期 select to_char(sysdate,‘DY‘) from dual; -- 2014年5月20日为星期二 12. 获取12进制小时数 select to_char(sysdate,‘HH‘) from dual; -- 22:36分用12小时制计时为10点 13. 获取24进制小时数 select to_char(sysdate,‘HH24‘) from dual; -- 22:36分用24小时制计时为22点

 

二、常用时间函数

 

1. trunc(d, [ ? ]) 

技术分享技术分享
select sysdate S1, -- 返回当前日期,有时分秒
技术分享技术分享
  trunc(sysdate) S2, -- 返回当前日期,无时分秒
技术分享技术分享
  trunc(sysdate, ‘year‘) YEAR, -- 返回当前年的1月1日,无时分秒
技术分享技术分享
  trunc(sysdate, ‘month‘) MONTH, -- 返回当前月的1日,无时分秒
技术分享技术分享
  trunc(sysdate, ‘day‘) DAY, -- 返回当前星期的星期天,无时分秒
技术分享技术分享
  trunc(sysdate, ‘Q‘) QUARTER, -- 返回当前季度的1日,无时分秒
技术分享技术分享
  trunc(sysdate, ‘D‘) WEEK -- 返回当前星期的星期天,无时分秒
技术分享

 2. round(d, [?]) 舍入到最接近的日期 

技术分享技术分享
  select sysdate S1,
技术分享技术分享
  round(sysdate) S2,
技术分享技术分享
  round(sysdate, ‘year‘) YEAR, -- 舍入到最接近的年 2014/1/1
技术分享技术分享
  round(sysdate, ‘month‘) MONTH, -- 舍入到最接近的月 2014/6/1
技术分享技术分享
  round(sysdate, ‘day‘) DAY -- 舍入到最接近的星期日 2014/5/18
技术分享

 3. last_day(d) 获取包含d的月最后一天的日期 select last_day(sysdate) from dual; -- 获取本月最后一天: 2014/5/31 22:46:01 4. add_months(d, n) 日期d往后推n个月 select add_months(sysdate,2) from dual; -- 日期往后推2个月: 2014/7/20 22:49:36 5. next_day(d, day) select next_day(sysdate,2) from dual; -- 日期sysdate之后的第一周中, 指定星期的第2天是什么日期 6. months_between(f,s) 日期f和s间相差月数 select months_between(sysdate,to_date(‘2007-04-12‘,‘yyyy-mm-dd‘))from dual; -- 85.2889874551971 7. 获取两个日期间的天数 select floor(sysdate - to_date(‘20140405‘,‘yyyymmdd‘)) from dual;

 

三、oracle日期时间函数实例

 

1. 获取上个月最后一天 select to_char(add_months(last_day(sysdate),-1),‘yyyy-MM-dd‘) lastDay from dual; 2. 获取上个月的今天 select to_char(add_months(sysdate,-1),‘yyyy-MM-dd‘) preToday from dual; 3. 获取上个月的第一天 select to_char(add_months(last_day(sysdate)+1,-2),‘yyyy-MM-dd‘) firstDay from dual; 4. 获取某月中所有周五的具体日期 

技术分享技术分享
  select to_char(b.a, ‘YY-MM-DD‘)
技术分享技术分享
  from (select trunc(sysdate, ‘mm‘) + rownum - 1 a
技术分享技术分享
  where rownum < 32) b
技术分享技术分享
  where to_char(b.a, ‘day‘) = ‘星期五‘;
技术分享

 5. 查找2002-02-28至2002-02-01间除了星期一和七的天数 

技术分享技术分享技术分享
  select count(*)
技术分享技术分享
  from (select rownum - 1 row_num
技术分享技术分享
  from all_objects
技术分享技术分享
  where rownum <= to_date(‘2002-02-28‘, ‘yyyy-mm-dd‘) -
技术分享技术分享
  to_date(‘2002-02-01‘, ‘yyyy-mm-dd‘) + 1)
技术分享技术分享
  where to_char(to_date(‘2002-02-01‘, ‘yyyy-mm-dd‘) + row_num - 1, ‘D‘) not in(‘1‘, ‘7‘)

oracle日期函数

标签:

小编还为您整理了以下内容,可能对您也有帮助:

oracle中的to_ date函数如何使用?

一、在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from al;

如:

原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from al;

二、另要以24小时的形式显示出来要用HH24

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from al;//mi是分钟

select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from al;//mm会显示月份 oracle中的to_date参数含义

1.日期格式参数 含义说明

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 年中的第几个星期 1.日期时间间隔操作

当前时间减去7分钟的时间

select sysdate,sysdate - interval ’7’ MINUTE from al

当前时间减去7小时的时间

select sysdate - interval ’7’ hour from al

当前时间减去7天的时间

select sysdate - interval ’7’ day from al

当前时间减去7月的时间

select sysdate,sysdate - interval ’7’ month from al

当前时间减去7年的时间

select sysdate,sysdate - interval ’7’ year from al

时间间隔乘以一个数字

select sysdate,sysdate - 8 *interval ’2’ hour from al

2.日期到字符操作

select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from al select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from al select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from al select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from al

参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

3. 字符到日期操作

select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from al

具体用法和上面的to_char差不多。

4. trunk/ ROUND函数的使用

select trunc(sysdate ,’YEAR’) from al select trunc(sysdate ) from al select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from al

5.oracle有毫秒级的数据类型

--返回当前时间 年月日小时分秒毫秒

select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from al;

--返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)

select to_char(current_timestamp(9),’MI:SSxFF’) from al;

6.计算程序运行的时间(ms)

declare

type rc is ref cursor;

l_rc rc;

l_mmy all_objects.object_name%type;

l_start number default dbms_utility.get_time;

begin

for I in 1 .. 1000

loop

open l_rc for

’select object_name from all_objects ’||

’where object_id = ’ || i;

fetch l_rc into l_mmy;

close l_rc;

end loop;

dbms_output.put_line(round( (dbms_utility.get_time-l_start)/100, 2 ) ||’ seconds...’ );

end;

oracle怎么优化一个被经常调用的日期函数

1、尽可能减少使用日期函数的次数,将尽可能多的计算放在SQL查询语句的where条件中进行,数据库每次调用函数都会有一定的开销,若函数使用的频率较高,这种开销将会极大。
2、尽量使用索引加快查询,对于索引字段调用日期函数,Oracle无法使用索引,建议在表设计时多考虑索引的选择。
3、使用特定的日期函数,如Oracle提供了一些日期函数,如trunc、add_months、extract等,可以根据实际需求选择将日期精确到哪一级,加以使用能大幅减小日期函数的计算量。
4、使用materializedview,通过预计算将查询计算的结果缓存起来,并且在数据变化时实时更新缓存中的数据,这样可以避免每次查询时都进行计算。
5、对于大规模数据,可以考虑使用分区表,将数据按照不同日期范围进行分区,以加快查询速度。

oracle怎么优化一个被经常调用的日期函数

1、尽可能减少使用日期函数的次数,将尽可能多的计算放在SQL查询语句的where条件中进行,数据库每次调用函数都会有一定的开销,若函数使用的频率较高,这种开销将会极大。
2、尽量使用索引加快查询,对于索引字段调用日期函数,Oracle无法使用索引,建议在表设计时多考虑索引的选择。
3、使用特定的日期函数,如Oracle提供了一些日期函数,如trunc、add_months、extract等,可以根据实际需求选择将日期精确到哪一级,加以使用能大幅减小日期函数的计算量。
4、使用materializedview,通过预计算将查询计算的结果缓存起来,并且在数据变化时实时更新缓存中的数据,这样可以避免每次查询时都进行计算。
5、对于大规模数据,可以考虑使用分区表,将数据按照不同日期范围进行分区,以加快查询速度。

oracle trunc()函数关于日期和时间,需要详细解答和举例?

【答案】:给你个例子吧:

alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> SELECT 'Year' AS truncType , TRUNC( SYSDATE, 'YYYY' ) FROM DUAL

2 UNION ALL

3 SELECT 'Quarter' AS truncType, TRUNC( SYSDATE, 'Q' ) FROM DUAL

4 UNION ALL

5 SELECT 'Month' AS truncType, TRUNC( SYSDATE, 'MM' ) FROM DUAL

6 UNION ALL

7 SELECT 'Week' AS truncType, TRUNC( SYSDATE, 'W' ) FROM DUAL

8 UNION ALL

9 SELECT 'Day' AS truncType, TRUNC( SYSDATE, 'D' ) FROM DUAL

10 UNION ALL

11 SELECT 'Hour' AS truncType, TRUNC( SYSDATE, 'HH' ) FROM DUAL;

TRUNCTYPE TRUNC(SYSDATE,'YYYY

-------------- -------------------

Year 2010-01-01 00:00:00

Quarter 2010-10-01 00:00:00

Month 2010-10-01 00:00:00

Week 2010-10-15 00:00:00

Day 2010-10-17 00:00:00

Hour 2010-10-17 22:00:00

6 rows selected.

oracle常见的日期函数有哪些

说几个吧

1.sysdate
【功能】:返回当前日期。
【参数】:没有参数,没有括号
【返回】:日期
【示例】select sysdate hz from al;
返回:2016-05-7

2.add_months(d1,n1)
【功能】:返回在日期d1基础上再加n1个月后新的日期。
【参数】:d1,日期型,n1数字型
【返回】:日期
【示例】select sysdate,add_months(sysdate,3) hz from al;
返回:2016-05-7,2016-08-7

3.last_day(d1)
【功能】:返回日期d1所在月份最后一天的日期。
【参数】:d1,日期型
【返回】:日期
【示例】select sysdate,last_day(sysdate) hz from al;
返回:2016-05-7,2016-05-31

4.months_between(d1,d2)
【功能】:返回日期d1到日期d2之间的月数。
【参数】:d1,d2 日期型
【返回】:数字 如果d1>d2,则返回正数 如果d1<d2,则返回负数
【示例】 select sysdate, months_between(sysdate,to_date('2006-01-01','YYYY-MM-DD')), months_between(sysdate,to_date('2016-01-01','YYYY-MM-DD')) from al;
返回:2014-06-29,101.92,-18.07

oracle常见的日期函数有哪些

说几个吧

1.sysdate
【功能】:返回当前日期。
【参数】:没有参数,没有括号
【返回】:日期
【示例】select sysdate hz from al;
返回:2016-05-7

2.add_months(d1,n1)
【功能】:返回在日期d1基础上再加n1个月后新的日期。
【参数】:d1,日期型,n1数字型
【返回】:日期
【示例】select sysdate,add_months(sysdate,3) hz from al;
返回:2016-05-7,2016-08-7

3.last_day(d1)
【功能】:返回日期d1所在月份最后一天的日期。
【参数】:d1,日期型
【返回】:日期
【示例】select sysdate,last_day(sysdate) hz from al;
返回:2016-05-7,2016-05-31

4.months_between(d1,d2)
【功能】:返回日期d1到日期d2之间的月数。
【参数】:d1,d2 日期型
【返回】:数字 如果d1>d2,则返回正数 如果d1<d2,则返回负数
【示例】 select sysdate, months_between(sysdate,to_date('2006-01-01','YYYY-MM-DD')), months_between(sysdate,to_date('2016-01-01','YYYY-MM-DD')) from al;
返回:2014-06-29,101.92,-18.07

oracle中得到当前系统时间

1.获取系统的当前时间

date类型的:

selectsysdatefromal;

2.char类型的:

selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')fromal;

3.函数在ORACLE中获取年、季度、月、周、日的时间

selectto_char(sysdate,'yyyy')fromal;--年

selectto_char(sysdate,'MM')fromal;--月

selectto_char(sysdate,'dd')fromal;--日

selectto_char(sysdate,'Q')fromal;--季

selectto_char(sysdate,'iw')fromal;--周--按日历上的那种,每年有52或者53周

4.日期操作,如下图

当前时间减去7分钟的时间

selectsysdate,sysdate-interval'7'MINUTEfromal;

当前时间减去7小时的时间

selectsysdate-interval'7'hourfromal;

当前时间减去7天的时间

selectsysdate-interval'7'dayfromal;

当前时间减去7月的时间

selectsysdate,sysdate-interval'7'monthfromal;

当前时间减去7年的时间

selectsysdate,sysdate-interval'7'yearfromal;

时间间隔乘以一个数字

selectsysdate,sysdate-8*interval'7'hourfromal;

oracle中是否具有“判定字符串是否符合日期格式”的函数,类似于sqlserver的ifdate。

oracle中有“判定字符串是否符合日期格式”的函数,解决方法如下:

1、首先除了sysdate函数外oracle中还包含其它日期函数,如add_months(日期,数字)在指定的日期上加入指定的月数,求出新的日期。

2、除此之外还有next_day(日期,星期一)函数,计算当前日期的下个星期一时间。

3、还有last_day(日期),用来求出指定日期所在月份的最后一天。

4、还有另外一个months_between(日期,指定日期),可以计算出两个日期相差的月数。

5、如果给出的指定日期是字符串,在计算的时候就需要先将字符串进行转换成日期然后再进行计算,使用to_date(日期,'格式'),就完成了。

显示全文