2011-01-21 9 views
12

Voglio CREARE CAST una funzione adatta per convertire 'carattere che varia' in 'intero'. Qualcuno può suggerire una funzione? Tutto ciò che cerco fallisce.Postgresql. CREATE CAST 'carattere che varia' a 'numero intero'

+4

Si dovrebbe risolvere il tuo SQL di non fare affidamento in implict getta. Non fare affidamento su cast impliciti nelle tue affermazioni, mai. –

+0

Sono d'accordo. Tuttavia non posso usare un software standard. – Simon

risposta

17

Utilizzare questo:

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

Utilizza le funzioni di input/output dei tipi di dati interessati.

+2

Più di 3k visualizzazioni/sp/query per rivedere e correggere i cast impliciti ... quindi sei arrivato con questo f **** facile soluzione. Mi ci vorrà molto più tempo. Grazie, risparmiatore di lavoro! (Mi chiedo perché gli sviluppatori di Postgres non abbiano inserito un parametro in postgresql.conf per questo ...) – Christian

+3

Noi (gli sviluppatori di PostgreSQL) viviamo e impariamo. –

0

Presumo che tu voglia riprendere il comportamento di Postgres 8.3 riguardo il casting implicito.

Vedere questo blog per gli esempi:
http://petereisentraut.blogspot.com/2008/03/readding-implicit-casts-in-postgresql.html

Oh: e bug che fornitore del software per risolvere lo SQL rotto;)

Modifica

Questo dovrebbe farlo:

 
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

Sì. L'ho trovato ma manca int4 (varchar) – Simon

+0

Contiene un cast per intero che è lo stesso di int4 se non sbaglio. –

+0

Perdonami se sono stupido ma nessuna delle funzioni restituisce un numero intero. Mi aspetto di creare CREATE CAST (varchar come numero intero) ... – Simon

1

La funzione precedente funziona se si aggiorna l'SQL per eseguire un cast esplicito. Tuttavia, se si aggiunge "come implicito" alla fine della propria istruzione "create cast", Postgres sarà in grado di capire automaticamente cosa si sta tentando di fare quando si confronta un numero intero con un varchar che può essere convertito in un numero intero .

Ecco la mia dichiarazione aggiornata che sembrava funzionare "implicitamente":

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

Questa funzione mi è stata utile per trasmettere i campi varchar come un normale utente di database che emette query anziché eseguire il cast del tipo stesso. – johnmartirano

0

ho ottenuto lo stesso errore. Ho un COLONNA

codice

dichiarata come tipo di carattere variabile (20) e una variabile locale

l_code

dichiarato di tipo int.

ho risolto sostituendo nella procedura di

SELECT 
... 
WHERE 
code = l_code AND 
.. 

con

code = cast(l_code as character varying) AND 
Problemi correlati