欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle日期型及处理方法讲解

程序员文章站 2022-04-12 21:39:28
日期处理 获取当前日期-sysdate() sysdate()获取的日期精确到秒 为日期加上特定月份-add_months() select add_months(to...

日期处理

获取当前日期-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