2012-06-25 13 views
5

7 tamsayı değerine sahibim (sırasıyla 3,1,3,4,4,5,4 hane ile) ve bunları tek bir tamsayıya (yani 24 basamaklı no.) Birleştirmem gerekiyor. . Bupostgresql uyumlu iki int değeri

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

gibi yapmaya çalıştım Ama bunu yürütmek hata alıyorum: bigint aralık dışında. Bunu yapmanın başka bir yolu var mı?
teşekkürler

+1

"Birleştirme" ile, dizgi birleştirmeyi (uygun bir şekilde dökümlendikten sonra) mı kastediyorsunuz? –

cevap

6

Ne hakkında:

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

bazı tabloda kimlikleri edersek

, o zaman yapabilirsiniz:

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

sorunu, veritabanımda kimliğin sayısal (24,0) olarak saklanmasıdır, böylece sütunu dize değeriyle güncelleyemiyorum. Sayısal değere ihtiyacım var. Bu mümkün mü? –

+1

@KumarRajput, sonucu sadece sayısal (24,0) 'e çevirir. Güncellenmiş. – vyegorov

+2

+1. Ayrıca, bir FYI olarak (PostgreSQL kullandığınız için), biraz daha rahat olan '' 'operatörünü kullanarak döküm yapabilirsiniz. Diğer bir deyişle, "CAST (num1 AS text)", "num1 :: text" ile aynıdır. –

0

Ben

tamsayı bir dize bitiştirmek gibi
SELECT REPLACE(STR(ISNULL(MAX(usuarioid) + 1, 1), 6), ' ', '0') FROM usuarios 

usuarioid string + 1