Oracle数据库之日期函数的常见用法。

1、sysdate  

用途:获取当前系统时间。

select SYSDATE FROM dual;

2、to_date('日期字符类型','日期格式类型') 

用途:将字符类型转化成日期类型的函数,主要用于插入、查询和修改。

--年 月 日 24制小时 分 秒 上/下午 星期中文
select to_date('2010-10-20 13:23:44','yyyy-mm-dd hh24:mi:ss:am:dy') dateTime from dual;
季度

y 表示年的最后一位

mm 用2位数字表示月

dd 表示当月第几天 hh 2位数表示小时 12进制 mi 2位数表示分钟 ss 2位数表示秒 60进制 q 一位数 表示季度 (1-4) ww 用来表示当年第几周

yy 表示年的最后2位

mon 用简写形式,

比如11月或者nov

ddd 表示当年第几天 hh24 2位数表示小时 24小时       w用来表示当月第几周

yyy 表示年的最后3位

month 用全称,

比如11月或者november

am或者pm 表示现在是上午还是下午

        IW 用来表示当年第几周
yyyy 用4位数表示年

RM 月份的罗马

比如:IV表示4月

          day、或者dy用来表示星期几

对于可以为空的日期字段,可用如下求NULL

select to_date(null) from dual;

当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。 
如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。 
同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。 
但是,如果忽略MM参数,Oracle并不会取整到年,而是取整到当前月

3、to_char('日期类型','字符格式类型')

用途:将日期类型转换为字符类型的函数,主要用于查询,也可以进行删除使用。

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')  strDateTime from dual;    --获取年-月-日 时:分:秒

这里的字符格式类型也可以用上面的表格中的格式。

 

4、其它用法

1、星期几

1、当前

select to_char(SYSDATE,'day') strDay from dual; 

2、指定时间

--字符型日期
select to_char(to_date('2012-10-20','yyyy-mm-dd'),'day') strDay from dual; 

--DateTime型日期,Creat_Time是数据库的日期字段
select to_char(Creat_Time,'day') strDay from dual; 

3、英文星期

select to_char(to_date('2012-10-20','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = English') strDay from dual;   

2、两个日期间的天数

select floor(sysdate - to_date('20161010','yyyymmdd')) strTime from dual; 

--其中sysdate=2016/10/20 17:10:51
--显示结果:10

3、两个日期间的月数

--今天距某个时间点
select  months_between(SYSDATE,date'2019-01-29') Mon from dual;


--两个指定的时间点
select  months_between(date'2019-05-29',date'2019-01-29') Mon from dual;


--Add_months(d,n) : 当前日期d后推n个月,用于从一个日期值增加或减少一些月份
Select add_months(sysdate,2) from dual;

4、获取昨天:

select trunc(sysdate-1) from dual;

5、获取上个月第一天:

select add_months(trunc(sysdate,'MON'),-1) from dual
 --两个都可以
select add_months(trunc(sysdate,'MON'),-13) from dual

--以下是上月最后一天
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;

--上月今天:
select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;

6、获得本季度第一天:

select trunc(add_months(sysdate,0),'Q') from dual

7、当前时间减7分钟:

select  sysdate - interval '7' MINUTE from dual;

同理,如果减7小时,7天,7月,7年,将SQL中的MINUTE换成hour,day,month,year,

8、时间间隔乘一个数8:

select sysdate - 8*interval '7' hour from dual;

9、本月最后一天:

Select last_day(sysdate) from dual;

10、按月进行统计

select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');

同理,按周是ww,按季度是q,按年是yyyy

11、NEXT_DAY(DATE,WEEKDAY)的用法:距离当前时间最近的下一个星期几所在的时间。

DATE参数为日期型,WEEKDAY可用1~7替代,1表示星期日,2代表星期一

可以设置当前对话的字符集,中文或者英文

alter   session   set   NLS_DATE_LANGUAGE   =   American; --将当前对话改为英文。

alter   session   set   NLS_DATE_LANGUAGE   =   'SIMPLIFIED CHINESE'; --将当前对话改为中文。

select Next_day(sysdate, 1) from dual;

select next_day(sysdate,'星期日') from dual; 

5、相关日期函数

  • add_months(d,n) 日期d加n个月 
  • last_day(d) 包含d的月份的最后一天的日期 
  • month_between(d,e) 日期d与e之间的月份数,e先于d 
  • new_time(d,a,b) a时区的日期和时间d在b时区的日期和时间 
  • next_day(d,day) 比日期d晚,由day指定的周几的日期 
  • sysdate 当前的系统日期和时间 
  • greatest(d1,d2,...dn) 给出的日期列表中最后的日期 
  • least(d1,k2,...dn) 给出的日期列表中最早的日期 
  • to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串 
  • to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式 
  • round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期 
  • trunc(d [,fmt]) 日期d按fmt指定格式截断到最近的日期附:

你可能感兴趣的:(数据库)