在postgresql中识别无效日期
我试图将脏输入解析到postgres表中。“日期”字段有时包含非日期,如“00000000”或“20100100”,我对此有问题。pg拒绝接受这些,这是正确的 有没有办法让博士后识别无效日期(或者只有有效日期,如果效果更好的话),这样我就可以替换一个合理的默认日期 (我曾考虑过创建一个表,列出我愿意接受的日期,并将其用于子选择,但这似乎非常不雅观。) 干杯在postgresql中识别无效日期,postgresql,date,Postgresql,Date,我试图将脏输入解析到postgres表中。“日期”字段有时包含非日期,如“00000000”或“20100100”,我对此有问题。pg拒绝接受这些,这是正确的 有没有办法让博士后识别无效日期(或者只有有效日期,如果效果更好的话),这样我就可以替换一个合理的默认日期 (我曾考虑过创建一个表,列出我愿意接受的日期,并将其用于子选择,但这似乎非常不雅观。) 干杯 Jurgen您可以编写一个带有的pgsql函数。 比上述方法更通用的方法: create function safe_cast(text,a
Jurgen您可以编写一个带有的pgsql函数。 比上述方法更通用的方法:
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频道的朋友们。:) 日期字段不能包含无效日期。你是说一个包含日期值的varchar列吗?事实上,这是一个我试图解释为日期的varchar列。这似乎正是我所需要的。谢谢答案可靠,希望看到在PostgreSQL核心中实现轻量级解决方案。如本评论所述,在某些情况下,将事务与建议的答案相乘可能会导致性能问题。