gpt4 book ai didi

sql - SQL Server 函数 Convert 的 Postgresql 等价物

转载 作者:行者123 更新时间:2023-11-29 13:49:33 25 4
gpt4 key购买 nike

我需要一个等同于 SQL Server 函数 convert 的 Postgres 函数。我最终写了一个函数

    CREATE OR REPLACE FUNCTION convert (target VARCHAR(50),source ANYELEMENT,style INT) RETURNS ANYELEMENT
AS
$$ BEGIN
CASE
when style=0 then CASE
WHEN target ='int' THEN return source::int;
WHEN target ='smallint' or target = 'tinyint' THEN return source::smallint;
WHEN target ='bigint' THEN return source::bigint;
WHEN target ='numeric' or target = 'real' or target = 'float' THEN return source::double precision;
WHEN target ='smallmoney' or target = 'money' or target = 'decimal' THEN return source::double precision;
WHEN target ='char' THEN return source::char;
WHEN target ='datetime' or target = 'smalldatetime' then return source::timestamp;
WHEN target like 'varchar%' or target like 'nvarchar%' THEN return source::varchar;
WHEN target = 'text' or target like 'ntext' THEN return source::text;
WHEN target = 'timestamp' THEN return source::varchar(30);
WHEN target = 'binary' or target='varbinary' THEN return source::bytea;
WHEN target = 'uniqueidentifier' THEN return source::varchar(37);
WHEN target = 'sysname' THEN return source::varchar(128);
WHEN target = 'sql_variant' THEN return varchar;
WHEN target = 'bit' THEN if source::varchar='1' THEN return true; ELSIF source::varchar='0' THEN return false; else RAISE EXCEPTION 'Invalid value for Input boolean'; END IF;
ELSE return source::anyelement;
END CASE;
when style!=0 then CASE
WHEN (style = 0 OR style = 100) THEN return to_timestamp(source::text,'mon dd yyyy hh:miAM');
WHEN style = 1 THEN return to_timestamp(source::text,'mm/dd/yy');
WHEN style = 101 THEN return to_timestamp(source::text,'mm/dd/yyyy');
..
..
END CASE;
END CASE;
END;
$$ LANGUAGE plpgsql;

当以 select convert('int','1',0) 调用函数时,它会抛出以下错误:

"ERROR: could not determine polymorphic type because input has type "unknown" 1 statement failed."

当我将第二个参数显式转换为 convert('int','1'::text,0) 时,它起作用了。但是我需要在不做任何额外 Actor 的情况下打电话。有人可以帮忙吗?

最佳答案

如果不更改 PostgreSQL 解析器,则不能编写像 convert 这样的函数。请改用 PostgreSQL cast 函数。 anyelement 类似于模板 - 如果输入的 anyelementint,那么输出的 anyelement 将是 int 也是。这不是你想要的。

PostgreSQL 不允许在函数内部选择​​结果类型时编写任何函数。在调用函数之前应该知道结果类型。并且由于 PostgreSQL 对您的函数一无所知,因此无法按照您的需要选择结果类型。

关于sql - SQL Server 函数 Convert 的 Postgresql 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43337809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com