我有一个日期字段,格式为20140525(yyyymmdd)。 我使用TO_DATE(20140528,'yyyymmdd')将日期转换为05/28/2014,但是此日期字段还包含'00000000'值,这将导致TO_DATE函数由于无效月份'00'而错误输出(和可能是无效的日期错误)
如何使用to_date转换有效日期格式,同时忽略无效的'00000000'值?我仍想在查询
中保留'00000000'的日期答案 0 :(得分:1)
首先,这就是为什么将日期信息存储在除date
数据类型之外的任何内容中是个坏主意。如果您的数据类型正确,生活通常会更容易。通过将日期存储为字符串,您可以使用更多空间并获得更少的价值。
如果您拥有不可转换数据的唯一情况是此00000000
值,则可以
(CASE WHEN column = '00000000'
THEN cast(null as date)
ELSE to_date( column, 'yyyymmdd' )
END)
但在绝大多数情况下,一旦您的数据类型不正确,您最终会得到更多不正确的值。有人会输入一个不存在的日期(即'20140431'),这也会导致您的to_date
功能失败。要处理这个问题,你通常需要一个能够捕获并忽略异常的函数,即
CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2,
p_format IN VARCHAR2 )
RETURN DATE
IS
BEGIN
RETURN to_date( p_str, p_format );
EXCEPTION
WHEN value_error
THEN
RETURN null;
END;
答案 1 :(得分:0)
TO_DATE(REPLACE(date, '00000000'), 'YYYYMMDD')