Oracle⽇期格式⽇期及⽇期格式:
获取系统⽇期:
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位
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 selectsysdatefromdual;
格式化: 2018-01-19 22:46:59
selectto_char(sysdate,'yy-mm-dd hh24:mi:ss')fromdual 获取昨天:2018/1/18
selecttrunc(sysdate-1)fromdual;
获取上个⽉第⼀天:2017/12/1
selectadd_months(trunc(sysdate,'MON'),-1)from dual selectadd_months(trunc(sysdate,'MON'),-13)fromdual 获得本季度第⼀天:2018/1/1
selecttrunc(add_months(sysdate,0),'Q')fromdual
获得上季度第⼀天:2017/10/1
selecttrunc(add_months(sysdate,-3),'Q')fromdual
补充
当前时间减去7分钟的时间
selectsysdate,sysdate-interval'7'MINUTEfromdual;
当前时间减去7⼩时的时间
selectsysdate-interval'7'hourfromdual;
当前时间减去7天的时间selectsysdate-interval'7'dayfromdual;
当前时间减去7⽉的时间selectsysdate,sysdate-interval'7'monthfrom dual;
当前时间减去7年的时间selectsysdate,sysdate-interval'7'yearfrom dual;
时间间隔乘以⼀个数字selectsysdate,sysdate-8*interval'7'hourfrom dual;
Oracle 常⽤的时间函数
oracle中trunc函数用法Sysdate : 当前⽇期和时间
SQL>Selectsysdatefrom dual;2018/1/1923:15:20Last_day : 本⽉最后⼀天
SQL>Selectlast_day(sysdate)from dual;2018/1/3123:16:24Add_months(d,n) : 当前⽇期d后推n个⽉,⽤于从⼀个⽇期值增加或减少⼀些⽉份
SQL>Selectadd_months(sysdate,2)from dual;2018/3/1923:18:29Months_between(f,s) : ⽇期f和s间相差⽉数
SQL>selectmonths_between(sysdate,to_date('2017-8-1','yyyy-mm-dd'))from dual;5.6120034348865
NEXTDAY(d, dayofweek) :返回由"dayofweek"命名的,在变量"d"指定的⽇期之后的第⼀个⼯作⽇的⽇期。参数"dayof_week"必须为该星期中的某⼀天。
SQL>SELECTnext_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。上⽉末天:selectto_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDayfrom dual;2017-12-312。上⽉今天
selectto_char(add_months(sysdate,-1),'yyyy-MM-dd') PreTodayfrom dual;2017-12-193.上⽉⾸天
selectto_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDayfrom dual;2017-12-014.按照每周进⾏统计
SQL>selectto_char(sysdate,'ww')fromdualgroupbyto_char(sysdate,'ww');035。按照每⽉进⾏统计
selectto_char(sysdate,'mm')fromdualgroupbyto_char(sysdate,'mm');016。按照每季度进⾏统计
selectto_char(sysdate,'q')fromdualgroupbyto_char(sysdate,'q');17。按照每年进⾏统计
selectto_char(sysdate,'yyyy')fromdualgroupbyto_char(sysdate,'yyyy');20188.要到某⽉中所有周五的具体⽇期
selecttrunc(sysdate,'MM')+rownum-1asdfromdba_objectswhererownum<32) twhereto_char(t.d,'MM')=to_char(sysdate,'MM')--出当前⽉份的周五的⽇期andtrim(to_char(t.d,'Day'))='星期五' ;18-01-0518-01-1218-01-1918-01-26如果把where to_char(t.d,
'MM')=to_char(sysdate,'MM')改成sysdate-90,即为查当前⽉份的前三个⽉中的每周五的⽇期。