Sql 检查是否可以在postgres中将值类型转换为间隔

Sql 检查是否可以在postgres中将值类型转换为间隔,sql,postgresql,Sql,Postgresql,我有一个用户定义的值,输入到postgres数据库中。如果输入的值正确,则可以将其转换为间隔。但是,某些值可能输入错误,从而引发异常 有没有办法检查值是否可以转换为间隔?大致如下: CASE WHEN my_interval [can be cast as interval] THEN my_interval::interval ELSE NULL END as my_valid_interval 有一个相当广泛的格式,生产各种各样的。因此,简单的答案是,您不能简单地检查某个字

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

有没有办法检查值是否可以转换为间隔?大致如下:

CASE
    WHEN my_interval [can be cast as interval] THEN my_interval::interval
    ELSE NULL
END as my_valid_interval

有一个相当广泛的格式,生产各种各样的。因此,简单的答案是,您不能简单地检查某个字符串是否是有效的间隔

最简单的解决方案可能是使用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;
像这样使用它:

SELECT string_to_interval(my_interval) AS my_valid_interval
FROM ...

控制数据后,修复根本原因。在表定义中使用间隔数据类型。谢谢,您在函数中缺少了一个
THEN
,而其他函数则与此完全不同。