识别postgresql中的无效日期

时间:2011-07-18 08:00:52

标签: postgresql date

我正在尝试将脏输入解析为postgres表。我有一个'日期'字段的问题,偶尔包含非日期,如'00000000'或'20100100'。 pg拒绝接受这些,这是正确的。

有没有办法让postgres识别无效日期(或者只有有效日期,如果效果更好),那么我可以替换合理的默认值吗?

(我已经考虑建立一个表格,列出我愿意接受的日期,并在子选项中使用它,但这看起来非常不优雅。)

干杯,

尔根

2 个答案:

答案 0 :(得分:7)

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频道向友好的家伙们致敬。 :)

答案 1 :(得分:0)

您可以使用exception handling block编写pgsql函数。