我可以在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');
我必须在函数定义本身转换它。
你可以创建一个从text
到integer
的演员表,但这是一个坏主意,因为它会导致其他地方的惊人行为。
你有两个选择:
integer
,然后将其传递给函数。integer
。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 ]