如何在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');

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

答案

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

你有两个选择:

  • 将参数传递给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

“名称”类型的 PostgreSQL 函数参数存在问题

使用多个复合输出参数调用 PostgreSQL 函数