日期处理
获取当前日期-sysdate()
sysdate()获取的日期精确到秒
为日期加上特定月份-add_months()
select add_months(to_date('2010-2-27','YYYY-MM-DD'),1) new_date from dual
结果:2010-3-27
当某年的2月只有28天, 那么添加一个月后,返回3月的最后一天
select add_months(to_date('2010-2-28','YYYY-MM-DD'),1) new_date from dual
结果:2010-3-31
如果增加月份之后的日期为非法日期,将返回该月的最后一天
select add_months(to_date('2010-1-30','YYYY-MM-DD'),1) new_date from dual
结果:2010-2-28
返回特定日期所在月的最后一天-last_day()
select last_day(to_date('2010-2-28','YYYY-MM-DD')) new_date from dual
结果:2010-2-28
返回2个日期所差月数-months_between()
months_between()返回2个日期相减所得的月数,返回值不一定是整数
select months_between(to_date('2010-4-4','YYYY-MM-DD'),to_date('2010-2-6','YYYY-MM-DD')) as new_date from dual
结果:1.93548….
如果第一个参数小于第二个参数,返回值就是负数
返回特定日期之后的一周内日期-next_day()
select next_day(to_date('2010-4-4','yyyy-mm-dd'),2) new_date from dual
结果:2010-4-5
第二个参数代表星期几,在Oracle中,1代表星期日,2代表星期一…
截取日期-trunc()
trunc(日期,截取格式) select trunc(sysdate,'DD') new_date from dual
结果:2010-4-5
select trunc(sysdate,'MM') new_date from dual
结果:2010-4-1
trunc(sysdate,’MM’)将当前日期截取到月,获得结果2010-4-1,即当前月份的第一天
select trunc(sysdate,'MI') new_date from dual
结果:2010-4-5 15:44:00
trunc(sysdate,’MI’)将当前日期截取到分钟,忽略分钟以后的部分。截取日期实际是将其中某些信息位置为0
返回当前会话时区的当前日期-current_date()
select sessiontimezone,to_char(current_date,'yyyy-mm-dd hh:mi:ss') result from dual
结果:+08:00 2010-4-5 4:25:26
sessiontimezone返回当前时区,current_date返回当前日期
返回当前会话时区的时间戳-current_timestamp()
select sessiontimezone,current_timestamp from dual
结果:+08:00 05-4月 -10 04.51.11.640000 下午 +08:00
返回日期的某个域-extract()
select extract(域名,from 日期) select extract(month from sysdate) new_month from dual
结果;4
注意:在日期型中无法分解出小时、分钟、秒等信息。想要获得小时等信息,则必须使用日期时间型作为数据源
select extract(hour from systimestamp) new_month from dual
结果:14
注意:此时的小时信息是零时区的标准时间
可以自行创建一个函数获得一个日期的所有信息
create or replace function get_field(p_date date,p_format varchar2) return varchar2 is val varchar2(10); tmp_date varchar2(20); begin tmp_date:=to_char(p_date,'yyyy-mm-dd hh24:mi:ss'); if lower(p_format)='year' then val:=substr(tmp_date,1,4); end if; if lower(p_format)='month' then val:=substr(tmp_date,6,2); end if; if lower(p_format)='day' then val:=substr(tmp_date,9,2); end if; if lower(p_format)='hour' then val:=substr(tmp_date,12,2); end if; if lower(p_format)='minute' then val:=substr(tmp_date,15,2); end if; if lower(p_format)='second' then val:=substr(tmp_date,18,2); end if; return val; end;
将日期转换为字符串-to_char()
select to_char(sysdate,'yyyy-mm-dd') new_date from dual
结果:2010-4-5