我有一个字段指定了将来的时间戳,记录的到期时间。我希望能够接受字符串时间戳或表示从现在开始的时间间隔。是否有一些简单的方法来尝试将字符串转换为间隔,如果成功,则将其添加到now()
,否则将其转换为时间戳(带时区)?强制将时间戳或时间间隔字符串转换为时间戳
在它被问到之前,是的,我确定我可以用存储过程执行它,我很好奇我是否可以使用某种类型的COALESCE
样式magick。如果答案是存储过程,那就这样吧,我可以写出这个答案。
编辑:这是我作为存储过程的实现。
create or replace function
timestamptz_in_or_at(input text)
returns timestamptz
as $$
begin
begin
return now() + input::interval;
exception when others then
return input::timestamptz;
end;
end;
$$ language plpgsql
像这样的问题是错误处理。如果你只是在里面插入一个强制类型,而且字符串不正确,你会得到一个SQL错误。如果您想查看是否可以在不破坏当前事务的情况下进行强制转换,那么您可以在SQL中使用保存点,也可以编写带有错误处理功能的plpgsql函数。两者都很好。 –