zoukankan      html  css  js  c++  java
  • Oracle常用日期函数

    常用的时间格式掩码如下:
    掩码元素       含义
    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;  继承表记录

  • 相关阅读:
    P1219 [USACO1.5]八皇后 Checker Challenge 深度搜索 标记 回溯
    P2036 [COCI2008-2009#2] PERKET 深度搜索 暴力
    20201122 赛事纪录
    P4447 [AHOI2018初中组]分组 贪心
    P4995 跳跳! 贪心
    P1434 [SHOI2002]滑雪 记忆化搜索,深度搜索,动态规划
    leetcode(42)接雨水
    数据结构与算法的总纲
    leetcode(84)柱状图中最大的矩形
    leetcode(45)跳跃游戏
  • 原文地址:https://www.cnblogs.com/doudouxiaoye/p/5819636.html
Copyright © 2011-2022 走看看