我有一個字段指定了將來的時間戳,記錄的到期時間。我希望能夠接受字符串時間戳或表示從現在開始的時間間隔。是否有一些簡單的方法來嘗試將字符串轉換爲間隔,如果成功,則將其添加到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函數。兩者都很好。 –