2012-06-25 13 views
5

में दो दो मान मूल्यों को दोहराएं मेरे पास 7 पूर्णांक मान हैं (क्रमशः 3,1,3,4,4,5,4 अंकों के साथ) और मुझे उन्हें एक पूर्णांक (यानी 24 अंक संख्या) में जोड़ना होगा। । मैंने इसेपोस्टग्रेस्क्ल

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

पर जब मैं इसे निष्पादित करता हूं तो मुझे त्रुटि मिलती है: सीमा से बाहर बड़ा। क्या ऐसा करने का कोई और बेहतर तरीका है?
धन्यवाद

+1

"concatenation" द्वारा, क्या आप स्ट्रिंग concatenation (उचित कास्टिंग के बाद) का मतलब है? –

उत्तर

6

के बारे में क्या:

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

आप कुछ तालिका में अपनी आईडी के लिए होता है, तो आप कर सकते हैं:

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

समस्या है, मेरे डेटाबेस में आईडी को संख्यात्मक (24,0) के रूप में संग्रहीत किया जाता है, इसलिए मैं स्ट्रिंग मान के साथ कॉलम अपडेट नहीं कर सकता। मुझे संख्यात्मक मूल्य चाहिए। क्या यह संभव है? –

+1

@ कुमारराज, बस परिणाम को वापस 'संख्यात्मक (24,0)' में डाला। अपडेट किया गया। – vyegorov

+2

+1। इसके अलावा, एक एफवाईआई के रूप में (चूंकि आप PostgreSQL का उपयोग कर रहे हैं), आप थोड़ी अधिक सुविधाजनक '::' ऑपरेटर का उपयोग करके कास्टिंग कर सकते हैं। दूसरे शब्दों में, 'CAST (num1 AS text) '' num1 :: text' जैसा ही है। –

0

मैं

पूर्णांक एक स्ट्रिंग जोड़ सकते हैं
SELECT REPLACE(STR(ISNULL(MAX(usuarioid) + 1, 1), 6), ' ', '0') FROM usuarios 

usuarioid स्ट्रिंग + 1

है