PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

दो सीमांकक के साथ विभाजित स्ट्रिंग और प्रकार परिवर्तित करें

यदि आपको मध्यस्थ कदम की आवश्यकता है:

SELECT unnest(string_to_array(a, ' '))::float8
       -- or do something else with the derived table
FROM   unnest(string_to_array('3.584731 60.739211,3.590472 60.738030', ',')) a;

यह regexp_split_to_table() , लेकिन फिर भी तेज़ हो सकता है क्योंकि रेगुलर एक्सप्रेशन आमतौर पर अधिक महंगे होते हैं। (EXPLAIN ANALYZE के साथ परीक्षण करें ।)

मैं पहले ',' . पर विभाजित हुआ , और उसके बाद ' ' . पर - आप जो वर्णन करते हैं उसका उल्टा क्रम अधिक पर्याप्त लगता है।

यदि आवश्यक हो, तो आप इसे PL/pgSQL फ़ंक्शन में लपेट सकते हैं:

CREATE OR REPLACE FUNCTION public.split_string(_str text
                                             , _delim1 text = ','
                                             , _delim2 text = ' ')
  RETURNS SETOF float8 AS
$func$
BEGIN
   RETURN QUERY
   SELECT unnest(string_to_array(a, _delim2))::float8
          -- or do something else with the derived table from step 1
   FROM   unnest(string_to_array(_str, _delim1)) a;
END
$func$ LANGUAGE plpgsql IMMUTABLE;

या सिर्फ एक SQL फ़ंक्शन:

CREATE OR REPLACE FUNCTION public.split_string(_str text
                                             , _delim1 text = ','
                                             , _delim2 text = ' ')
  RETURNS SETOF float8 AS
$func$
   SELECT unnest(string_to_array(a, _delim2))::float8
   FROM   unnest(string_to_array(_str, _delim1)) a
$func$ LANGUAGE sql IMMUTABLE;

इसे IMMUTABLE बनाएं प्रदर्शन अनुकूलन और अन्य उपयोगों की अनुमति देने के लिए।

कॉल करें (_delim1 . के लिए दिए गए डिफ़ॉल्ट का उपयोग करके और _delim2 ):

SELECT * FROM split_string('3.584731 60.739211,3.590472 60.738030');

या:

SELECT * FROM split_string('3.584731 60.739211,3.590472 60.738030', ',', ' ');

सबसे तेज़

शीर्ष प्रदर्शन के लिए, translate() साथ में unnest(string_to_array(...)) :

SELECT unnest(
          string_to_array(
             translate('3.584731 60.739211,3.590472 60.738030', ' ', ',')
           , ','
          )
       )::float8


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में डिफ़ॉल्ट उपयोगकर्ता पासवर्ड कैसे सेट करें

  2. pgbouncer के माध्यम से क्वेरी का स्रोत खोजें

  3. सीएसवी/पोस्टग्रेज मेमोरी पर डंप करें

  4. Postgresql कॉन्फ़िग फ़ाइल कहाँ है:विंडोज़ पर 'postgresql.conf'?

  5. पोस्टग्रेस्क्ल के साथ इन्सर्ट इग्नोर और डुप्लिकेट की अपडेट (एसक्यूएल मर्ज) का अनुकरण कैसे करें?