oracle获取⽇期的毫秒_Oracledatetimestamp毫秒-时间函数总
结(转)
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;
如果你不确定⾃⼰的时区或者你担⼼从⼀个时区移植到另⼀个时区时,SQL语句会出错,Oracle还允许你⽤数字的形式来表⽰⼯作⽇。
但是要记得⼀点:1表⽰的是周⽇,2表⽰的是周⼀,3表⽰的是周⼆,依此类推。
--固定⽇期⼀天
select * from account a where a.applytime>= to_date('2011-02-26','yyyy-mm-dd') and a.applytime< to_date('2011-02-
27','yyyy-mm-dd');
--前天⼀天
select * from account a where a.applytime>= to_date(to_char(sysdate-2,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytime<
to_date(to_char(sysdate-1,'yyyy-mm-dd'),'yyyy-mm-dd');
昨天⼀天
select * from dxw_tmp a where a.applytime>= to_date(to_char(sysdate-1,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytime<
to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd');
--今天⼀天
select * from account a where a.applytime>= to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') and a.applytime<
to_date(to_char(sysdate+1,'yyyy-mm-dd'),'yyyy-mm-dd');
上⽉第⼀天
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.applytime<= to_date(to_char(add_months(sysdate,-1),'yyyy-mm-dd'),'yyyy-mm-dd');
select 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;
oracle 时间转换--当⽉⼀号
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')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论