今天有人问怎么找出不是日期(或不规范的日期)的行。
如 某行值为‘2014-02-29’,这就不是一个日期。
可以建一个函数来判断。
CREATE OR REPLACE FUNCTION is_date(str VARCHAR2) RETURN NUMBER AS
v_date DATE;
BEGIN
v_date := to_date(str, 'yyyy-mm-dd hh24:mi:ss');
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN - 1;
END;
/
WITH x AS
(SELECT '2014-02-29' AS c1
FROM dual
UNION ALL
SELECT '2014-02-28'
FROM dual)
SELECT * FROM x WHERE is_date(c1) = -1
查询结果如下
C1
----------
2014-02-29