用途:获取当前系统时间。
select SYSDATE FROM dual;
用途:将字符类型转化成日期类型的函数,主要用于插入、查询和修改。
--年 月 日 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并不会取整到年,而是取整到当前月
用途:将日期类型转换为字符类型的函数,主要用于查询,也可以进行删除使用。
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') strDateTime from dual; --获取年-月-日 时:分:秒
这里的字符格式类型也可以用上面的表格中的格式。
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指定格式截断到最近的日期附: