`
weishaoxiang
  • 浏览: 93513 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

Oracle 日期时间运算

 
阅读更多
---------------------oracle 时间运算-------------------------------------------------

--两个日期间的天数
SELECT FLOOR(SYSDATE - TO_DATE('20110701', 'yyyymmdd')) FROM DUAL;

--查找2002-02-28至2002-02-01间除星期一和七的天数
SELECT COUNT(*)
  FROM (SELECT ROWNUM - 1 RNUM
          FROM ALL_OBJECTS
         WHERE ROWNUM <= TO_DATE('2002-02-28', 'yyyy-mm-dd') -
               TO_DATE('2002-02-01', 'yyyy-mm-dd') + 1)
 WHERE TO_CHAR(TO_DATE('2002-02-01', 'yyyy-mm-dd') + RNUM - 1, 'D') NOT IN
       ('1', '7');

--两个日期间的月数
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('05-21-2011', 'MM-DD-YYYY')) "MONTHS"
  FROM DUAL;

SELECT MONTHS_BETWEEN(SYSDATE, DATE '2010-07-07') MONTHS FROM DUAL;

--处理月份天数不定的办法  
SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2), 'yyyymmdd'),
       LAST_DAY(SYSDATE)
  FROM DUAL;

--找出今年的天数  
SELECT ADD_MONTHS(TRUNC(SYSDATE, 'year'), 12) - TRUNC(SYSDATE, 'year')
  FROM DUAL;

--闰年的处理方法 ;如果是28就不是闰年 
TO_CHAR(LAST_DAY(TO_DATE('02' || :YEAR, 'mmyyyy')), 'dd')

--不同时区的处理  
  SELECT TO_CHAR(NEW_TIME(SYSDATE, 'GMT', 'EST'), 'dd/mm/yyyy hh:mi:ss'),
         SYSDATE
    FROM DUAL;

--5秒钟一个间隔,SSSSS表示5位秒数  
SELECT TO_DATE(FLOOR(TO_CHAR(SYSDATE, 'SSSSS') / 300) * 300, 'SSSSS'),
       TO_CHAR(SYSDATE, 'SSSSS')
  FROM DUAL;

-- 一年的第几天  
SELECT TO_CHAR(SYSDATE, 'DDD'), SYSDATE FROM DUAL;

--计算小时,分,秒,毫秒  
SELECT DAYS,
       A,
       TRUNC(A * 24) HOURS,
       TRUNC(A * 24 * 60 - 60 * TRUNC(A * 24)) MINUTES,
       TRUNC(A * 24 * 60 * 60 - 60 * TRUNC(A * 24 * 60)) SECONDS,
       TRUNC(A * 24 * 60 * 60 * 100 - 100 * TRUNC(A * 24 * 60 * 60)) MSECONDS
  FROM (SELECT TRUNC(SYSDATE) DAYS, SYSDATE - TRUNC(SYSDATE) A FROM DUAL);

SELECT SUBSTR('2004-32', 1, 4) YY, TO_NUMBER(SUBSTR('2004-32', 6)) WW
  FROM DUAL;

--1.查询某周的第一天
SELECT TRUNC(DECODE(WW,
                    53,
                    TO_DATE(YY || '3112', 'yyyyddmm'),
                    TO_DATE(YY || '-' || TO_CHAR(WW * 7), 'yyyy-ddd')),
             'd') LAST_DAY
  FROM (SELECT SUBSTR('2004-32', 1, 4) YY,
               TO_NUMBER(SUBSTR('2004-32', 6)) WW
          FROM DUAL);

SELECT TRUNC(TO_DATE(SUBSTR('2011-01', 1, 5) ||
                     TO_CHAR((TO_NUMBER(SUBSTR('2011-01', 6))) * 7),
                     'yyyy-ddd'),
             'd') - 6 FIRST_DAY
  FROM DUAL;

SELECT MIN(V_DATE)
  FROM (SELECT (TO_DATE('200201', 'yyyymm') + ROWNUM) V_DATE
          FROM ALL_TABLES
         WHERE ROWNUM < 370)
 WHERE TO_CHAR(V_DATE, 'yyyy-iw') = '2002-49';

--2.查询某周的最后一天
SELECT TRUNC(DECODE(WW,
                    53,
                    TO_DATE(YY || '3112', 'yyyyddmm'),
                    TO_DATE(YY || '-' || TO_CHAR(WW * 7), 'yyyy-ddd')),
             'd') - 6 FIRST_DAY
  FROM (SELECT SUBSTR('2004-33', 1, 4) YY,
               TO_NUMBER(SUBSTR('2004-33', 6)) WW
          FROM DUAL);

SELECT TRUNC(TO_DATE(SUBSTR('2003-01', 1, 5) ||
                     TO_CHAR((TO_NUMBER(SUBSTR('2003-01', 6))) * 7),
                     'yyyy-ddd'),
             'd') LAST_DAY
  FROM DUAL;

SELECT MAX(V_DATE)
  FROM (SELECT (TO_DATE('200408', 'yyyymm') + ROWNUM) V_DATE
          FROM ALL_TABLES
         WHERE ROWNUM < 370)
 WHERE TO_CHAR(V_DATE, 'yyyy-iw') = '2004-33';

--3.查询某周的日期
SELECT MIN_DATE, TO_CHAR(MIN_DATE, 'day') DAY
  FROM (SELECT TO_DATE(SUBSTR('2004-33', 1, 4) || '001' + ROWNUM - 1,
                       'yyyyddd') MIN_DATE
          FROM ALL_TABLES
         WHERE ROWNUM <= DECODE(MOD(TO_NUMBER(SUBSTR('2004-33', 1, 4)), 4),
                                0,
                                366,
                                365)
        UNION
        SELECT TO_DATE(SUBSTR('2004-33', 1, 4) - 1 ||
                       DECODE(MOD(TO_NUMBER(SUBSTR('2004-33', 1, 4)) - 1, 4),
                              0,
                              359,
                              358) + ROWNUM,
                       'yyyyddd') MIN_DATE
          FROM ALL_TABLES
         WHERE ROWNUM <= 7
        UNION
        SELECT TO_DATE(SUBSTR('2004-33', 1, 4) + 1 || '001' + ROWNUM - 1,
                       'yyyyddd') MIN_DATE
          FROM ALL_TABLES
         WHERE ROWNUM <= 7)
 WHERE TO_CHAR(MIN_DATE, 'yyyy-iw') = '2004-33';
 
 
 ---------------------------转换函数--------------------------------------------------------
to_char() --

to_date() --

to_number('numbervalue') --转换成数值

SELECT to_number('1314') FROM dual;

round('numbervalue') --取整函数(四舍五入)

Select round(to_number('123.567')) from dual;

floor(sysdate - to_date('20110701','yyyymmdd')) 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics