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

Regexp_matches परिणामों से दूसरा मैच प्राप्त करें

आप REGEXP_REPLACE का उपयोग कर सकते हैं :

SELECT REGEXP_REPLACE('1234567 - 7654321 - some - more - text', '^\d+[^\d]+(\d+).*$', '\1');

आउटपुट

7654321

यह रेगेक्सपी कुछ अंकों से शुरू होने वाली स्ट्रिंग की तलाश करता है (^\d+ ) उसके बाद कुछ गैर-अंकीय वर्ण ([^\d]+ ) और फिर अंकों का दूसरा समूह ((\d+) ) स्ट्रिंग के अंत तक कुछ वर्णों के बाद (.*$ ) () अंक वर्णों के दूसरे समूह के आसपास एक कैप्चरिंग समूह बनाता है, जिसे हम \1 के साथ प्रतिस्थापन स्ट्रिंग में संदर्भित कर सकते हैं . चूंकि REGEXP_REPLACE केवल रेगेक्स से मेल खाने वाले स्ट्रिंग के हिस्सों को प्रतिस्थापित करता है, एक रेगेक्स होना आवश्यक है जो संपूर्ण से मेल खाता हो केवल वांछित डेटा के साथ इसे बदलने के लिए स्ट्रिंग।

अपडेट करें

यदि अंकों के पहले सेट से पहले संभावित वर्ण हैं, तो आपको रेगेक्स को

. में बदलना चाहिए
^[^\d]*\d+[^\d]+(\d+).*$

अपडेट 2

यदि यह संभव है कि शुरुआत में संख्याओं का केवल एक सेट हो, तो हमें पहले भाग के मिलान को वैकल्पिक बनाना होगा। हम ऐसा गैर-कैप्चरिंग समूह के साथ कर सकते हैं:

^[^\d]*(?:\d+[^\d]+)?(\d+).*$

यह मिलान को अंकों के पहले सेट पर वैकल्पिक बनाता है ताकि यदि यह अस्तित्व में नहीं है (यानी अंकों का केवल एक सेट है) तो रेगेक्स अभी भी मेल खाएगा। एक गैर-कैप्चरिंग समूह का उपयोग करके (?: . जोड़कर) समूह की शुरुआत में, हमें प्रतिस्थापन स्ट्रिंग को \1 . से बदलने की आवश्यकता नहीं है . अपडेट किया गया SQLFiddle



  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. pg_dump --exclude-table के साथ अभी भी पृष्ठभूमि में वे टेबल शामिल हैं COPY कमांड जो इसे चलाता है?

  3. Postgresql में `tablefunc` क्वेरी में शून्य मान कैसे शामिल करें?

  4. PL/pgSQL में तालिका बनाने के लिए चुनें .. INTO

  5. किसी अन्य तालिका से आईडी प्राप्त करने के बाद तालिका में सम्मिलित करें