在postgresql中识别无效日期



我试图解析脏输入到postgres表。我有一个"日期"字段偶尔包含非日期,如"00000000"或"20100100"的问题。Pg拒绝接受这些,这是正确的。

是否有一种方法可以让postgres识别无效日期(或只识别有效日期,如果效果更好),所以我可以替换一个合理的默认值?

(我考虑过建立一个表,列出我愿意接受的日期,并在子选择中使用它,但这似乎非常不优雅。)

欢呼,

Jurgen

http://www.tek-tips.com/viewthread.cfm?qid=1280050&page=9

比上面更通用的方法:

create function safe_cast(text,anyelement) 
returns anyelement 
language plpgsql as $$ 
begin 
    $0 := $1; 
    return $0; 
    exception when others then 
        return $2; 
end; $$;

像这样使用:

select safe_cast('Jan 10, 2009', '2011-01-01'::timestamp)
select safe_cast('Jan 10, 2009', null::timestamp)

归功于#postgresql irc频道的友好家伙。:)

您可以编写带有异常处理块的pgsql函数

最新更新