Oracle日期型及处理方法讲解

日期处理

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

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐