2012-06-25 75 views
5

Tengo 7 valores enteros (con 3,1,3,4,4,5,4 dígitos respectivamente) y tengo que concatenarlos en un solo entero (es decir, un número de 24 dígitos) . Intenté hacerlo asíconcat dos valores int en 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); 

Pero cuando lo ejecuto recibo el error: bigint fuera de rango. ¿Hay alguna otra forma mejor de hacerlo?
gracias

+1

Por "concatenación", ¿te refieres a la concatenación de cadenas (después de la conversión adecuada)? –

Respuesta

6

¿Qué hay de:

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

Si le sucede que tiene sus identificaciones en alguna mesa, entonces usted puede hacer:

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

problema es que, en mi base de datos, la identificación se almacena como numérica (24,0) por lo que no puedo actualizar la columna con el valor de cadena. Necesito valor numérico. ¿Es esto posible? –

+1

@KumarRajput, acaba de convertir el resultado en 'numérico (24,0)'. Actualizado. – vyegorov

+2

+1. Además, como un FYI (ya que está usando PostgreSQL), puede hacer casting usando el operador '' 'ligeramente más conveniente. En otras palabras, 'CAST (num1 AS text)' es lo mismo que 'num1 :: text'. –

0

Como puedo concatenar una cadena a un entero

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

miembroid es cadena + 1

Cuestiones relacionadas