如何处理PostgreSQL查询中的类型转换错误?

yc0p9oo0  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(367)

我在Oracle服务器中遇到了类型转换错误,然后我找到了下面提到的解决方案之一:

SELECT TO_NUMBER('b' default -1 on conversion error) from dual;

输出:-1
正如在上面的查询中提到的,如果该值不是数字,则它将给出缺省值。
有没有办法在Postgres SQL中处理同样的事情?

x9ybnkn6

x9ybnkn61#

根据@a_horse_with_no_name的评论:PostgreSQL没有提供这样的内置函数,但您自己在PL/pgSQL中创建一个函数非常简单。

CREATE OR replace FUNCTION to_number(
    argument text,
    default_result integer default -1)
RETURNS integer LANGUAGE plpgsql
AS $$
BEGIN
    RETURN argument::integer;
EXCEPTION WHEN OTHERS THEN
    RETURN default_result;
END $$;

或者,甚至在plain SQL中-正如Vaibhav Parab的评论所建议的那样

CREATE OR replace FUNCTION to_number(argument text,default_result integer default -1)
RETURNS integer LANGUAGE SQL 
AS '
SELECT CASE 
          WHEN argument~E''^\\d+$'' 
            THEN argument::integer 
          ELSE default_result 
       END';

现在,您可以通过select to_number('b', default_result=>-1);拨打这两个电话。language sql函数变体does not impose any additional overhead与直接输入整个case相比,因为它是meets all the inlining criteria,所以它的性能相同,但更短。
这是一个可以工作的DB<>fiddle

相关问题