如何在postgresql函数中转换输入参数类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在postgresql函数中转换输入参数类型相关的知识,希望对你有一定的参考价值。
我可以在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 ]
以上是关于如何在postgresql函数中转换输入参数类型的主要内容,如果未能解决你的问题,请参考以下文章
powerbuilder里面如何把editmask中输入的字符串类型如何转换成datetime啊用来比较和datetime类型的大小 !
在 PostgreSQL 中使用自定义类型并将它们用作函数中的参数
没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。 -- Netbeans、Postgresql 8.4 和 Glassfish