OracleSQL⽇期及⽇期格式获取命令⽇期及⽇期格式:
获取⽇期:
sysdate()
格式化⽇期
to_char(sysdate(),'yyyy-mm-dd,hh24:mi:ss')
to_date(sysdate(),'yyyy-mm-dd,hh24:mi:ss')
注:
to_char 把⽇期或数字转换为字符串
to_char(number, '格式')
to_char(salary, '$99,999.99')
to_char(date, '格式')
to_date 把字符串转换为中的⽇期类型
to_date(char, '格式')
转换格式:
表⽰ year 的:
y 表⽰年的最后⼀位
yy 表⽰年的最后2位
yyy 表⽰年的最后3位
oracle登录命令yyyy ⽤4位数表⽰年
表⽰ month 的:
mm ⽤2位数字表⽰⽉
mon ⽤简写形式,⽐如11⽉或者nov
month ⽤全称,⽐如11⽉或者november
表⽰ day 的:
dd 表⽰当⽉第⼏天
ddd 表⽰当年第⼏天
dy 当周第⼏天,简写,⽐如星期五或者fri
day 当周第⼏天,全称,⽐如星期五或者friday
表⽰ hour 的:
hh 2位数表⽰⼩时 12进制
hh24 2位数表⽰⼩时 24⼩时
表⽰minute的:
mi 2位数表⽰分钟
表⽰second的:
ss 2位数表⽰秒 60进制
表⽰季度的:
q ⼀位数表⽰季度(1-4)
另外还有ww ⽤来表⽰当年第⼏周 w⽤来表⽰当⽉第⼏周。
24⼩时制下的时间范围:00:00:00-23:59:59
12⼩时制下的时间范围:1:00:00-12:59:59
例⼦:
返回系统⽇期: 2018/1/19 22:44:54
select sysdate from dual;
格式化: 2018-01-19 22:46:59
select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual
获取昨天:2018/1/18
select trunc(sysdate-1) from dual;
获取上个⽉第⼀天:2017/12/1
select add_months(trunc(sysdate,'MON'),-1) from dual
select add_months(trunc(sysdate,'MON'),-13) from dual
获得本季度第⼀天:2018/1/1
select trunc(add_months(sysdate,0),'Q') from dual
获得上季度第⼀天:2017/10/1
select trunc(add_months(sysdate,-3),'Q') from dual
补充
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual;
当前时间减去7⼩时的时间
select sysdate - interval '7' hour from dual;
当前时间减去7天的时间
select sysdate - interval '7'day from dual;
当前时间减去7⽉的时间
select sysdate,sysdate - interval '7'month from dual;
当前时间减去7年的时间
select sysdate,sysdate - interval '7'year from dual;
时间间隔乘以⼀个数字
select sysdate,sysdate -8*interval '7' hour from dual;
Oracle 常⽤的时间函数
Sysdate :当前⽇期和时间
SQL>Select sysdate from dual;
2018/1/1923:15:20
Last_day :本⽉最后⼀天
SQL>Select last_day(sysdate) from dual;
2018/1/3123:16:24
Add_months(d,n) :当前⽇期d后推n个⽉,⽤于从⼀个⽇期值增加或减少⼀些⽉份
SQL>Select add_months(sysdate,2) from dual;
2018/3/1923:18:29
Months_between(f,s) :⽇期f和s间相差⽉数
SQL>select months_between(sysdate,to_date('2017-8-1','yyyy-mm-dd'))from dual;
5.6120034348865
NEXTDAY(d, dayofweek) :返回由"dayofweek"命名的,在变量"d"指定的⽇期之后的第⼀个⼯作⽇的⽇期。参数"dayof_week"必须为该星期中的某⼀天。SQL>SELECT next_day(to_date('2017-08-20','YYYY-MM-DD'),1) FROM dual;
2017/8/27
常⽤⽇期数据格式(该段为摘抄)
Y或YY或YYY 年的最后⼀位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表⽰2002年
SYEAR或YEAR SYEAR使公元前的年份前加⼀负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表⽰公元前1112年Q 季度,1~3⽉为第⼀季度 Select to_char(sysdate,’Q’) from dual; 2表⽰第⼆季度
MM ⽉份数 Select to_char(sysdate,’MM’) from dual; 12表⽰12⽉
RM ⽉份的罗马表⽰ Select to_char(sysdate,’RM’) from dual; IV表⽰4⽉
Month ⽤9个字符长度表⽰的⽉份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表⽰5⽉
WW 当年第⼏周 Select to_char(sysdate,’WW’) from dual; 24表⽰2002年6⽉13⽇为第24周
W 本⽉第⼏周 Select to_char(sysdate,’W’) from dual; 2002年10⽉1⽇为第1周
DDD 当年第⼏, 1⽉1⽇为001,2⽉1⽇为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2⽉2 9⽇为第363天DD 当⽉第⼏天 Select to_char(sysdate,’DD’) from dual; 04 10⽉4⽇为第4天
D 周内第⼏天 Select to_char(sysdate,’D’) from dual; 5 2002年3⽉14⽇为星期⼀
DY 周内第⼏天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3⽉24⽇为星期天
HH或HH12 12进制⼩时数 Select to_char(sysdate,’HH’) from dual; 02 午夜2点过8分为02
HH24 24⼩时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14
MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分
SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒
提⽰注意不要将MM格式⽤于分钟(分钟应该使⽤MI)。MM是⽤于⽉份的格式,将它⽤于分钟也能⼯作,但结果是错误的。现在给出⼀些实践后的⽤法:
1。上⽉末天:
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
2017-12-31
2。上⽉今天
select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
2017-12-19
3.上⽉⾸天
select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
2017-12-01
4.按照每周进⾏统计
SQL>select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');
03
5。按照每⽉进⾏统计
select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');
01
6。按照每季度进⾏统计
select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');
1
7。按照每年进⾏统计
select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');
2018
8.要到某⽉中所有周五的具体⽇期
select trunc(sysdate, 'MM')+rownum-1as d from dba_objects where rownum <32) t
where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --出当前⽉份的周五的⽇期
and trim(to_char(t.d, 'Day')) ='星期五' ;
18-01-05
18-01-12
18-01-19
18-01-26
如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查当前⽉份的前三个⽉中的每周五的⽇期。