如何通过SQL查询在表中获取错误的日期

时间:2018-03-11 03:47:31

标签: sql oracle

我有一张表作为emp,其中一列是hiredate。我的雇用日期栏中有错误的日期。例如:30-feb-2018,31-apr-2018,31-jun-2018等。 这意味着这些日期不存在。我如何通过SQL查询找出错误的日期。

2 个答案:

答案 0 :(得分:1)

创建一个小函数来测试有效日期:

CREATE OR REPLACE FUNCTION is_Valid_Date(
  datestr VARCHAR2,
  format  VARCHAR2 DEFAULT 'DD/MM/YYYY'
) RETURN NUMBER DETERMINISTIC
AS
  x DATE;
BEGIN
  IF datestr IS NULL THEN
    RETURN NULL;
  END IF;
  x := TO_DATE( datestr, format );
  RETURN 1;
EXCEPTION
  WHEN OTHERS THEN
    RETURN 0;
END;
/

然后在您的查询中调用它:

SELECT hiredate
FROM   emp
WHERE  is_Valid_Date( hiredate, 'DD-MON-YYYY' ) = 0;

答案 1 :(得分:1)

在Oracle 12.2及更高版本中,可以使用 DEFAULT .. ON CONVERSION ERROR

TO_DATE选项
SQL> with t(hiredate)
  2  AS
  3  (
  4  select '28-feb-2018' FROM DUAL UNION ALL
  5  select '30-feb-2018' FROM DUAL UNION ALL
  6  select '31-apr-2018' FROM DUAL UNION ALL
  7  select '31-jun-2018' FROM DUAL
  8  )
  9  SELECT hiredate
    ,TO_DATE(hiredate DEFAULT NULL ON CONVERSION ERROR
        ,'DD-MON-YYYY') valid_date
FROM t;

HIREDATE    VALID_DATE
----------- ---------
28-feb-2018 28-FEB-18
30-feb-2018 NULL
31-apr-2018 NULL
31-jun-2018 NULL