oracle中有没有判断某一字符串为正确的日期型数据的函数?
例如字符串:19850228是正确的日期型,而19850431是错的,且需要判断闰年

解决方案 »

  1.   

    SELECT DECODE (  ADD_MONTHS (TRUNC (SYSDATE, 'yyyy'), 12)
                   - TRUNC (SYSDATE, 'yyyy'),
                   366, '闰年',
                   '平年'
                  )
      FROM DUAL
      

  2.   

    /* Formatted on 2008/11/21 11:58 (Formatter Plus v4.8.8) */
    CREATE OR REPLACE FUNCTION valid_date (in_date VARCHAR2)
       RETURN VARCHAR2
    IS
       flag   VARCHAR2 (10);
    BEGIN
       SELECT DECODE (  ADD_MONTHS (TRUNC (TO_DATE (in_date, 'yyyymmdd'), 'yyyy'),
                                    12
                                   )
                      - TRUNC (TO_DATE (in_date, 'yyyymmdd'), 'yyyy'),
                      366, '闰年',
                      '平年'
                     )
         INTO flag
         FROM DUAL;   RETURN flag;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          RETURN '错误日期';
       WHEN OTHERS
       THEN
          RETURN '错误日期';
    END valid_date;
    /select valid_date('200808121') from dual
    '错误日期'select valid_date('20080812') from dual
    '闰年'
      

  3.   

    不知道你是否单判断
    'yyyymmdd'这种格式
    还是需要判断

    'yyyy-mm-dd','yyyy/mm/dd','yyyy-mon-dd'之类的格式全算正确?
      

  4.   

    只要判断'yyyymmdd'这种格式就可以了
      

  5.   

    自己写个函数....to_date这个字串,捕捉错误....有错就是非法日期...
    不用考虑闰年,to_date已经帮你做了.
    我们项目中就是这么做的...也就3,4行代码的一个function.