Oracle date timestamp 时间函数总结

yyyy-mm-dd hh24:mi:ss.ff 年-月-日 时:分:秒.毫秒

–上一月,上一年
select add_months(sysdate,-1) last_month,add_months(sysdate,-12) last_year from dual;
–下一月,下一年
select add_months(sysdate,1) last_month,add_months(sysdate,12) last_year from dual;

–当月最后一天
select LAST_DAY(sysdate) from dual;
–下周日期
select next_day(sysdate,'星期五') “下周五” from dual;
select next_day(sysdate, ‘Friday') “Next Friday” from dual;
select next_day(sysdate, 4) from dual;
如果你不确定自己的时区或者你担心从一个时区移植到另一个时区时,语句会出错,Oracle还允许你用数字的形式来表示工作日。
但是要记得一点:1表示的是周日,2表示的是周一,3表示的是周二,依此类推。

–固定日期一天
select * from account a where a.applytime>= to_date(‘2011-02-26′,'yyyy-mm-dd') and a.applytime–前天一天
select * from account a where a.applytime>= to_date(to_char(sysdate-2,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytime昨天一天
select * from dxw_tmp a where a.applytime>= to_date(to_char(sysdate-1,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytime–今天一天
select * from account a where a.applytime>= to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytime上月第一天
select to_date(to_char(add_months(sysdate,-2)+1,'yyyy-mm-dd'),'yyyy-mm-dd') from dual ;
上月最后一天
select to_date(to_char(add_months(sysdate,-1),'yyyy-mm-dd'),'yyyy-mm-dd') from dual;
select * from account a where a.applytime>= to_date(to_char(add_months(sysdate,-2)+1,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytimeselect to_date(to_char(add_months(sysdate,-2),'yyyy-mm-dd'),'yyyy-mm-dd') from dual;
select to_date(to_char(add_months(sysdate,-3)+1,'yyyy-mm-dd'),'yyyy-mm-dd') from dual ;
–trunc 截取日期
–当天零点
select trunc(sysdate,'dd') from dual;
–当月一号
select trunc(sysdate,'mm') from dual;
–本年一月一号
select trunc(sysdate,'yyyy') from dual;
–可以根据需要自己去截取

关于毫秒:
Oracle 毫秒的存储必须字段类型为timestamp(6) –数字表示存储的毫秒位数
–当前毫秒级
select to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss.ff6′) from dual;
–字符串转为timestamp类型
select to_timestamp(‘2012-02-03 10:29:46.453234′,'yyyy-mm-dd hh24:mi:ss.ff6') from dual;
–timestamp转为字符型
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff6′) from dual;
PS: ff后面的数字表示获得的毫秒位数,默认是6;一般ff3 获得三位毫秒数。

如果你想把DATE类型转换成TIMESTAMP类型,就使用CAST函数。
select cast(sysdate as timestamp) from dual;
但是值得注意的是:在转换后的段尾部有了一段“.000000”。这是因为从date转换过来的时候,没有小数秒的信息,缺省为0。
而且显示格式是按照参数NLS_TIMESTAMP_FORMAT定的缺省格式显示。当你把一个表中date类型字段的数据移到另一个表的timestamp类型字段中去的时候,可以直接写INSERT SELECT语句,oracle会自动为你做转换的。

注意:to_char函数支持date和timestamp,但是trunc却不支持TIMESTAMP数据类型。这已经清楚表明了在当两个的差别极度重要的情况下,使用TIMESTAMP数据类型要比DATE数据类型更确切。

还值得一提的是:毫秒的显示精度是6位,不过有效位是3位,即最大值达到999,满1000ms就进为1s。当然你想保存6位毫秒也是有办法的:
insert 值指定六位:to_timestamp(‘2012-02-03 10:29:46.453234′,'yyyy-mm-dd hh24:mi:ss.ff6')

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Oracle date timestamp 时间函数总结
本文地址:https://www.zhiletu.com/archives-291.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微