检查值是否可以在postgres中作为间隔进行类型转换

Raz*_*nho 3 sql postgresql

我有一个用户定义的值,该值输入到postgres数据库中。如果正确输入了该值,则应该可以将其转换为一个间隔,但是,某些输入的值可能不正确,这将引发异常。

有没有一种方法可以检查是否可以将值强制转换为间隔?遵循以下内容:

CASE
    WHEN my_interval [can be cast as interval] THEN my_interval::interval
    ELSE NULL
END as my_valid_interval
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 5

产生有效间隔输入的格式有很多种。因此,简单的答案是您不能简单地检查某个字符串是否为有效间隔。

可能最直接的解决方案是使用PL / pgSQL函数,该函数将字符串转换为interval任何错误并返回null:

CREATE FUNCTION string_to_interval(s text) RETURNS interval AS $$
BEGIN
    RETURN s::interval;
EXCEPTION WHEN OTHERS THEN
    RETURN NULL;
END; $$ LANGUAGE plpgsql STRICT;
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

SELECT string_to_interval(my_interval) AS my_valid_interval
FROM ...
Run Code Online (Sandbox Code Playgroud)