博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle日期函数
阅读量:3592 次
发布时间:2019-05-20

本文共 4466 字,大约阅读时间需要 14 分钟。

 

 日期增减,直接用+,-,比如:

select sysdate+1 from dual;

 

取得日期的年、月、日:

  TO_NUMBER(TO_CHAR(sysdate,'YYYY'))  

  TO_NUMBER(TO_CHAR(sysdate,'MM'))  
  TO_NUMBER(TO_CHAR(sysdate,'DD'))

或者用extract函数:  

   
  SQL>   select   extract(year   from   sysdate)   from   dual;  
   
  EXTRACT(YEARFROMSYSDATE)  
  ------------------------  
                                          2009

 

Null Date:

You can assign Null to a date field, you can set it to Empty.

 

 

From:

常用的时间格式掩码如下:

掩码元素       含义
YYYY       四位数年份 (如:2005)     year
YY         二位数年份(如  05)
Q          季度(1-4)
MM         月份(01-12)      month
WW         年的星期数(1-53),其中第一星期为年的第一天至第七天
W          月的星期数(1-5),其中第一星期为月的第一天至第七天
DDD        年的日(1-366)
DD         月的日(1-31)    
D          周的日(1-7),其中周日为1,周六为7    day
HH24       24小时制(0-23)     hour
MI         分钟(0-59)     minute
SS         秒(0-59)     second
SSSSS      自午夜之后的秒(0-86399)
两个很不错的函数,可以操作日期,也可以操作数值:
        round(日期,'指定的日期掩码')      返回日期时间的四舍五入结果
        指定的掩码不同则结果结果也不同
    year           以 7月1日分界线
    month        以16号为分界线
    day            以中午12点为分界线
    hh             以30分钟为分界线
    mi             以30秒为分界线
        trunc(日期,'指定的日期掩码')        返回截断时间
    year            本年度的1月1日
    month        本月的1号
    
例子:(注意: day    d    dd 三者的区别)
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-1-1
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-6-1
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-6-1
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-20
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-20
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-17
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-1-1
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-1
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-1
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual; 
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-13
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-13
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-16
日期时间函数:
           add_months(日期,number)    指定日期推迟number个月
           last_day(日期)   指定日期当月的最后一天
           new_time(日期,时区简写)   调整时区
           next_day(日期,number)  number表示周几,星期日是1,指定number的日期(一周内或一周后)
           months_between(日期1,日期2)   日期1和日期2之间有几个月
           sysdate   系统当期那日期和时间
练习时的代码:
select to_number(to_char(last_day(add_months(to_date('20040406','yyyymmdd'),-1))+1,'yyyymmdd')) from dual;
 
TO_NUMBER(TO_CHAR(LAST_DAY(ADD
------------------------------
                      20040401

select to_number(to_char(last_day(to_date('20040406','yyyymmdd')),'yyyymmdd')) from dual;

TO_NUMBER(TO_CHAR(LAST_DAY(ADD

------------------------------
                      20040430

 

 

create or replace procedure p_hkb_date_insert is
  /*
  过程功能描述:日期插入表中
  */

  v_days number(10);

  v_date date;
  i      number(10);

begin

  begin

    --取得当月天数
    select to_number(to_char(last_day(sysdate), 'dd'))
      into v_days
      from dual;
    --select sysdate from dual; 当前日期
    --select last_day(sysdate) from dual;  月底日期
    --select last_day(add_months(sysdate, -1)) from dual;   上月底日期
    -- SELECT   to_char(last_day(SYSDATE),'dd')   days   FROM   dual;    当前月的天数
    --select last_day(add_months(sysdate,-1))+1 from dual; 当前月第一天
    --select to_number(to_char(sysdate,'yyyymmdd')) from dual;系统当前日期转换成如20070910格式:
 
  end;
  i := 1;
  begin
    select last_day(add_months(sysdate, -1)) into v_date from dual;
    while i <= v_days
   
     loop
      insert into hkb_date
      values
        (v_date + i,
         to_char(v_date + i, 'yyyymmdd'),
         to_number(to_char(v_date + i, 'yyyymmdd')));
      --insert into hkb_date
      --(float_date)
      -- values
      --(to_char(v_date + i, 'yyyymmdd'));
      -- insert into hkb_date
      --(number_date)
      -- values
      --(to_number(to_char(v_date + i, 'yyyymmdd')));
      i := i + 1;
    end loop;
  end;
end p_hkb_date_insert;
create table hkb_date_construct as select * from hkb_date where 1=2;  继承表字段

create table hkb_date_data as select * from hkb_date;  继承表记录

转载地址:http://lotwn.baihongyu.com/

你可能感兴趣的文章
设计模式之委派模式
查看>>
设计模式之模板方法模式
查看>>
设计模式之策略模式
查看>>
设计模式之责任链模式
查看>>
怎么成为一个合格的ERP系统管理员
查看>>
企业为什么要用ERP
查看>>
ERP计划层次探讨
查看>>
ERP的五大核心思想
查看>>
ERP、PLM是什么意思?ERP、PLM有什么内在联系
查看>>
公司升级ERP管理系统的三大诱因
查看>>
Android四大应用组件(一)——Activity
查看>>
Spring5框架——IOC(基于xml配置文件)(一)
查看>>
spring5框架——IOC(基于注解)&AOP(二)
查看>>
SpringMVC框架(一)
查看>>
SpringMVC框架(二)
查看>>
IDEA整合SSM框架
查看>>
Spring注解驱动开发(一)
查看>>
Spring注解驱动开发(二)
查看>>
SpringSecurity&thyemleaf命名空间约束地址
查看>>
字符串(二)
查看>>