我想创建一个合适的函数来将'character varying'转换为'integer'。谁能建议一个功能?我尝试的一切都失败了。
答案 0 :(得分:19)
使用此:
CREATE CAST (varchar AS integer) WITH INOUT [AS IMPLICIT];
它使用所涉及数据类型的输入/输出功能。
答案 1 :(得分:1)
如果您更新SQL以进行显式转换,则上述函数有效。 但是,如果在“create cast”语句的末尾添加“as implicit”,Postgres将能够在将整数与可以转换为整数的varchar进行比较时自动确定您要执行的操作。
这是我更新的声明似乎“隐式”工作:
CREATE FUNCTION toint(varchar)
RETURNS integer
STRICT IMMUTABLE LANGUAGE SQL AS
'SELECT cast($1 as integer);';
CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar) as Implicit;
答案 2 :(得分:0)
我假设您想要恢复Postgres 8.3关于隐式转换的行为。
有关示例,请参阅此博客条目:
http://petereisentraut.blogspot.com/2008/03/readding-implicit-casts-in-postgresql.html
哦:并且修复了破坏SQL的软件供应商的错误;)
修改强>
这应该这样做:
CREATE FUNCTION toint(varchar) RETURNS integer STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT cast($1 as integer);'; CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar);
答案 3 :(得分:0)
我得到了同样的错误。我有一个COLUMN
码
声明为类型字符vary(20)和局部变量
l_code
声明为int。
我解决了程序中的替换
SELECT
...
WHERE
code = l_code AND
..
与
code = cast( l_code as character varying) AND