2013-02-07 14 views
6

मैं इस निम्नलिखित कोड है:मैं एक पोस्टग्रेएसक्यूएल (9.1) फ़ंक्शन के भीतर एक वर्ण को पूर्णांक में कैसे परिवर्तित करूं?

BEGIN 
    x := split_part(text, ',', 1); 
    UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = x; 
END 

लेकिन मेरे कॉलम idx नामित तालिका एक अंकीय प्रकार है, और split_part चर x करने के लिए एक चरित्र प्रकार देता है। मैंने CAST का उपयोग करने का प्रयास किया है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाए।

कोई विचार?

उत्तर

9
इस तरह

:

UPDATE albumphoto SET order = 1 WHERE idtable = 1 AND idx = CAST (x AS INTEGER); 

(INTEGER के बजाय उचित सांख्यिक प्रकार का प्रयोग करें)।

7

या सरल:

UPDATE albumphoto 
SET order = 1 
WHERE idtable = 1 
AND idx = split_part(text, ',', 1)::int -- or whatever type it is 
AND order IS DISTINCT FROM 1; 

expression::type सरल (गैर एसक्यूएल मानक) Postgres रास्ता कास्ट करने के लिए है। अध्याय Type Casts में मैनुअल में विवरण।
data types in PostgreSQL के बारे में अधिक जानकारी।

पिछले विधेय मैं जोड़ा उपयोगी अगर order पहले से ही 1, जिस स्थिति में अद्यतन कुछ भी बदल नहीं होगा, लेकिन अब भी वही खर्च हो सकता है। इसके बजाय कुछ भी नहीं करते हैं। संबंधित (पिछले पैराग्राफ पर विचार करें):

और तुम नहीं जरूरत एक चर यहाँ से करते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे