如何在单条SQL查询中处理日期转换错误?
处理无效日期转换的两种方案
一、让查询返回NULL而非报错
如果你的Oracle版本是12c及以上,推荐使用内置的VALIDATE_CONVERSION函数判断字符串是否能合法转换为日期,再通过CASE逻辑返回转换结果或NULL:
SELECT CASE WHEN VALIDATE_CONVERSION(date_id AS DATE, 'YYYYMMDD') = 1 THEN TO_DATE(date_id, 'YYYYMMDD') ELSE NULL END AS converted_date FROM dates;
如果是12c之前的版本,可以自定义一个安全转换函数,捕获转换异常并返回NULL:
CREATE OR REPLACE FUNCTION safe_to_date(p_date_str VARCHAR2, p_format VARCHAR2) RETURN DATE IS BEGIN RETURN TO_DATE(p_date_str, p_format); EXCEPTION WHEN OTHERS THEN RETURN NULL; END; /
调用该函数完成查询:
SELECT safe_to_date(date_id, 'YYYYMMDD') AS converted_date FROM dates;
二、找出所有无效日期行
利用VALIDATE_CONVERSION(12c+)筛选无法转换的行:
SELECT date_id FROM dates WHERE VALIDATE_CONVERSION(date_id AS DATE, 'YYYYMMDD') = 0;
如果使用自定义函数,则通过判断函数返回值是否为NULL来筛选:
SELECT date_id FROM dates WHERE safe_to_date(date_id, 'YYYYMMDD') IS NULL;
内容的提问来源于stack exchange,提问作者jhog
相关产品推荐
相关产品推荐

