30
2016
11

oracle - 关于日期的函数

当用到函数时,日期转换里面的格式化参数是不区分大小的,例如,Select to_char(t.vdate,'dd'),t.vdate From test_student t;

'yyyy-mm-dd hh24:mi:ss' 和'YYYY-MM-DD HH24:MI:SS'、'yyyy-MM-dd hh24:mi:ss'、'dd'、'DD'等都没区别

1.日期到字符:

select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual

timestamp类型转字符:30-6月 -14 01.42.31.865000 下午 +08:00

select to_char(current_timestamp,'DD-MON-YYYY HH24:MI:SSxFF3') from dual;   这里的数字3,填几精度就是几,最大=9

select to_timestamp('2000-1-1 0:0:0.1234', 'syyyy-mm-dd hh24:mi:ss.ff') from dual;

select t.v_time,to_char(current_timestamp(8),'DD-MON-YYYY HH24:MI:SSxFF') from test_student t;

2.字符到日期:

select to_date('2013-03-13 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual

3.--查询日期大于或小于某段时间,两个方案,一是两边都转换成时间类型,二是都转换成varchar类型
select SYSDATE from dual where to_char(sysdate,'YYYYMMDD') > '20050101';
select SYSDATE from dual where sysdate > to_date('20050101','YYYYMMDD');

3.add_months

select to_char(add_months(sysdate, -1), 'yyyymm') from dual;

现在sysdate是11月,如果需要取上一个月的数据,并且每天都要进行此操作,那就每天都需要改时间,用add_months就解决这个问题了

add_months(time,months)函数可以得到某一时间之前或之后n个月的时间

     1.如 select add_months(sysdate,-6) from dual;
     该查询的结果是当前时间半年前的时间
     2.select add_months(sysdate,6) from dual;
     该查询的结果是当前时间半年后的时间

4.select TRUNC(SYSDATE) from dual ;--TRUNC(SYSDATE)默认是截取系统日期到日,得到2012-12-19
TRUNC(SYSDATE)得到 2012-12-19 , 和TRUNC(SYSDATE,'DD')一样
TRUNC(SYSDATE,'YYYY'),得到2012-1-1
TRUNC(SYSDATE,'MM'),得到2012-12-1
TRUNC(SYSDATE,'DD'),得到2012-12-19
TRUNC(SYSDATE,'HH')或HH24,得到2012-12-19 14:00:00
TRUNC(SYSDATE,'MI'),得到2012-12-19 14:30:00
TRUNC(SYSDATE,'SS'),是会报错的,直接用SYSDATE不用TRUNC
另外说明一下,截取后得到的仍为date数据类型

 --查询在某段日期之间的数据

select * from all_tables a WHERE A.LAST_ANALYZED IS NOT NULL and a.LAST_ANALYZED between to_date('2013-03-01','yyyy-mm-dd') and to_date('2013-04-01','yyyy-mm-dd') order by a.LAST_ANALYZED desc;

« 上一篇 下一篇 »