2012-06-25 20 views
5

Tôi có 7 giá trị số nguyên (với 3,1,3,4,4,5,4 chữ số tương ứng) và tôi phải nối chúng vào một số nguyên duy nhất (tức là số 24 chữ số). . Tôi đã cố gắng thực hiện điều này như thế nàyconcat hai giá trị int trong 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); 

Nhưng khi tôi thực hiện, tôi gặp lỗi: lớn hơn ngoài phạm vi. Có cách nào khác tốt hơn để làm điều đó không?
nhờ

+1

Bằng cách "nối", bạn có nghĩa là nối chuỗi (sau khi đúc thích hợp) không? –

Trả lời

6

gì về:

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

Nếu bạn tình cờ có ID của bạn trong một số bảng, sau đó bạn có thể làm:

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

vấn đề là, trong cơ sở dữ liệu của tôi id được lưu trữ dưới dạng số (24,0) vì vậy tôi không thể cập nhật cột với giá trị chuỗi. Tôi cần giá trị số. Điều này có thể xảy ra không? –

+1

@KumarRajput, chỉ cần đưa kết quả trở lại vào 'số (24,0)'. Đã cập nhật. – vyegorov

+2

+1. Ngoài ra, với tư cách là một FYI (vì bạn đang sử dụng PostgreSQL), bạn có thể thực hiện việc đúc bằng cách sử dụng toán tử '::' thuận tiện hơn một chút. Nói cách khác, 'CAST (num1 AS text)' giống với 'num1 :: text'. –

0

Như tôi có thể nối một chuỗi để nguyên

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

usuarioid là chuỗi + 1