2011-01-21 72 views
12

我想創建CAST一個合適的函數來將'字符變化'轉換爲'整數'。任何人都可以建議一個功能我嘗試的一切都失敗了Postgresql。 CREATE CAST'字符變化'爲'整數'

+4

更換您應該解決您的SQL不依賴於內隱蒙上。永遠不要依賴於你的陳述中的暗示表達。 – 2011-01-21 15:54:13

+0

我同意。但是我不能使用現成的軟件。 – Simon 2011-01-21 15:59:06

回答

17

使用此項:

CREATE CAST (varchar AS integer) WITH INOUT [AS IMPLICIT]; 

它使用涉及的數據類型的輸入/輸出功能。

0

我假設你想獲得有關隱式轉換的Postgres 8.3的行爲。

示例請參見這個博客條目:
http://petereisentraut.blogspot.com/2008/03/readding-implicit-casts-in-postgresql.html

哦:和bug的軟件供應商,以修復損壞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); 
+0

是的。我發現,但它缺少int4(varchar) – Simon 2011-01-21 16:02:35

+0

它包含一個整型的強制轉換,如果我沒有弄錯,它與int4相同。 – 2011-01-21 16:10:50

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; 
0

我得到了同樣的錯誤。我有一個COLUMN

代碼

聲明爲類型字符改變

(20)和一個局部變量

l_code

聲明爲int類型。

我解決了程序

SELECT 
... 
WHERE 
code = l_code AND 
.. 

code = cast(l_code as character varying) AND 
相關問題