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

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

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

掩码元素       含义
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;  继承表记录

转载于:https://www.cnblogs.com/doudouxiaoye/p/5819636.html

你可能感兴趣的文章
盘点物联网网关现有联网技术及应用场景
查看>>
Windwos 08R2_DNS全面图文详解
查看>>
重拾黑客精神:后IT时代技术流的回归
查看>>
网络钓鱼大讲堂 Part3 | 网络钓鱼攻击向量介绍
查看>>
阿里云与Intel联合发布加密计算,亚洲首个云上“芯片级”数据保护
查看>>
js实现按钮复制功能
查看>>
1、下载安装scala编译器(可以理解为scala的jdk),地址:http://www.scala
查看>>
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
【安全牛学习笔记】提权
查看>>
HCNA——RIP的路由汇总
查看>>
javaweb开发之Filter实现过滤非法文字
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
【笔记】两个修复网络的命令
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
Symantec Endpoint Protection下载方法
查看>>
统治世界的十大算法
查看>>