2012-06-25 19 views
5

Ho 7 valori interi (con 3,1,3,4,4,5,4 cifre rispettivamente) e devo concatenarli a un singolo intero (ovvero un numero di 24 cifre). . Ho provato a farlo in questo modoconcat due valori interi in postgresql

create or replace function gen_id(int,int,int,int,int,int,int) returns bigint as $$ 
declare 
    id bigint; 
begin 
    id = $1 * 1000000000000000000000 + $2 * 100000000000000000000 + $3 * 100000000000000000 + $4 * 10000000000000 + $5 * 1000000000 + $6 * 10000 + $7; 
    return id; 
end; 
$$ language plpgsql; 

select * from gen_id(100,1,101,1000,1001,10001,1000); 

Ma quando lo eseguo ottengo errore: bigint fuori portata. C'è qualche altro modo migliore per farlo?
grazie

+1

Per "concatenazione", si intende la concatenazione di stringhe (dopo aver eseguito il casting in modo appropriato)? –

risposta

6

Che dire:

SELECT CAST(CAST(num1 AS text)||CAST(num2 AS text)||... AS numeric(24,0)) 

Se vi capita di avere gli ID in qualche tavolo, allora si può fare:

SELECT CAST(string_agg(CAST(num AS text), '') AS numeric(24,0)) FROM srctab; 
+0

problema è, nel mio database l'ID è memorizzato come numerico (24,0), quindi non posso aggiornare la colonna con valore stringa. Ho bisogno di un valore numerico. È possibile? –

+1

@KumarRajput, basta riportare il risultato in 'numerico (24,0)'. Aggiornato. – vyegorov

+2

+1. Inoltre, come FYI (dato che stai usando PostgreSQL), puoi eseguire il cast usando l'operatore '::' leggermente più conveniente. In altre parole, 'CAST (num1 AS text)' è lo stesso di 'num1 :: text'. –

0

Come posso concatenare una stringa a intero

SELECT REPLACE(STR(ISNULL(MAX(usuarioid) + 1, 1), 6), ' ', '0') FROM usuarios 

usuarioid è stringa + 1