Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在postgresql中识别无效日期_Postgresql_Date - Fatal编程技术网

在postgresql中识别无效日期

在postgresql中识别无效日期,postgresql,date,Postgresql,Date,我试图将脏输入解析到postgres表中。“日期”字段有时包含非日期,如“00000000”或“20100100”,我对此有问题。pg拒绝接受这些,这是正确的 有没有办法让博士后识别无效日期(或者只有有效日期,如果效果更好的话),这样我就可以替换一个合理的默认日期 (我曾考虑过创建一个表,列出我愿意接受的日期,并将其用于子选择,但这似乎非常不雅观。) 干杯 Jurgen您可以编写一个带有的pgsql函数。 比上述方法更通用的方法: create function safe_cast(text,a

我试图将脏输入解析到postgres表中。“日期”字段有时包含非日期,如“00000000”或“20100100”,我对此有问题。pg拒绝接受这些,这是正确的

有没有办法让博士后识别无效日期(或者只有有效日期,如果效果更好的话),这样我就可以替换一个合理的默认日期

(我曾考虑过创建一个表,列出我愿意接受的日期,并将其用于子选择,但这似乎非常不雅观。)

干杯


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核心中实现轻量级解决方案。如本评论所述,在某些情况下,将事务与建议的答案相乘可能会导致性能问题。