如何在postgresql函数中转换输入参数类型

问题描述 投票:1回答:2

我可以在postgresql中声明一个函数,它在其输入参数中将转换传递参数的数据类型。例如:

create or replace function temp(IN var1 integer, IN var2 varchar)
<function body>

select temp('12345','number');

作为传递参数'12345'是一个字符串,我希望它在将其传递给函数时直接转换为整数,如下所示:

create or replace function temp(IN var1 ::integer, IN var2 varchar)
    <function body>

可能吗?

注意:在将值传递给函数时,我无法转换值,如下所示:

select temp('12345'::integer,'number');

我必须在函数定义本身转换它。

postgresql function type-conversion
2个回答
1
投票

你可以创建一个从textinteger的演员表,但这是一个坏主意,因为它会导致其他地方的惊人行为。

你有两个选择:

  • 将参数传递给integer,然后将其传递给函数。
  • 将参数转换为函数内部的integer

0
投票
CREATE OR REPLACE FUNCTION totalRecords (P1 int, P2 int)
RETURNS integer AS $total$
declare
  total integer;
BEGIN
   total := P1 * P2;
   RETURN total;
END;
$total$ LANGUAGE plpgsql;
select totalRecords('12', 3)
| totalrecords |
| -----------: |
|           36 |

dbfiddle here

如果需要特殊数据类型,可以使用CREATE CAST

CREATE CAST定义了一个新的强制转换。演员表指定如何在两种数据类型之间执行转换。

CREATE CAST (source_type AS target_type)
    WITH FUNCTION function_name (argument_type [, ...])
    [ AS ASSIGNMENT | AS IMPLICIT ]

CREATE CAST (source_type AS target_type)
    WITHOUT FUNCTION
    [ AS ASSIGNMENT | AS IMPLICIT ]

CREATE CAST (source_type AS target_type)
    WITH INOUT
    [ AS ASSIGNMENT | AS IMPLICIT ]
© www.soinside.com 2019 - 2024. All rights reserved.