PostgreSQL的。 CREATE CAST'字符变化'变为'整数'

时间:2011-01-21 15:49:50

标签: postgresql

我想创建一个合适的函数来将'character varying'转换为'integer'。谁能建议一个功能?我尝试的一切都失败了。

4 个答案:

答案 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