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 $$;
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';
1条答案
按热度按时间x9ybnkn61#
根据@a_horse_with_no_name的评论:PostgreSQL没有提供这样的内置函数,但您自己在PL/pgSQL中创建一个函数非常简单。
或者,甚至在plain SQL中-正如Vaibhav Parab的评论所建议的那样
现在,您可以通过
select to_number('b', default_result=>-1);
拨打这两个电话。language sql
函数变体does not impose any additional overhead与直接输入整个case
相比,因为它是meets all the inlining criteria,所以它的性能相同,但更短。这是一个可以工作的DB<>fiddle。