2012-06-25 8 views
5

私は7つの整数値(それぞれ3,1,3,4,4,5,4桁)を持っており、それらを1つの整数(つまり24桁の数字)に連結する必要があります。 。私はこのようにしようとしましたpostgresqlのconcat 2つのint値

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

しかし、私はそれを実行するとエラーが発生します:bigintは範囲外です。それを行うための他の良い方法はありますか?
おかげ

+1

「連結」とは、(適切にキャストした後の)文字列の連結を意味しますか? –

答えて

6

何について:

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

あなたには、いくつかのテーブルにあなたのIDを持って起こる場合は、あなたが行うことができます:

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

問題は、私のデータベースでは、IDが数値(24,0)として格納されているため、列を文字列値で更新できません。私は数値が必要です。これは可能ですか? –

+1

@KumarRajput、結果を 'numeric(24,0)'にキャストするだけです。更新しました。 – vyegorov

+2

+1。また、FYI(PostgreSQLを使用しているので)より少し便利な '::'演算子を使ってキャスティングを行うことができます。つまり、 'CAST(num1 AS text)'は 'num1 :: text'と同じです。 –

0

私は

を整数に文字列を連結することができたよう
SELECT REPLACE(STR(ISNULL(MAX(usuarioid) + 1, 1), 6), ' ', '0') FROM usuarios 

usuarioidは文字列+ 1

です
関連する問題