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

कैसे PostgreSQL में स्ट्रिंग में regexp मैच की स्थिति प्राप्त करने के लिए?

ऐसा करने का एक तरीका (कई में से):मैच से शुरू होने वाली बाकी स्ट्रिंग को हटा दें और काटे गए स्ट्रिंग की लंबाई को मापें:

SELECT id, title
FROM   book
WHERE  title ILIKE '%deep%space%'
ORDER  BY length(regexp_replace(title, 'deep.*space.*', '','i'));

ILIKE . का उपयोग करना WHERE क्लॉज में, क्योंकि यह आमतौर पर तेज़ होता है (और यहाँ भी ऐसा ही करता है)।
regexp_replace() के चौथे पैरामीटर पर भी ध्यान दें। फ़ंक्शन ('i' ), इसे केस असंवेदनशील बनाने के लिए।

विकल्प

टिप्पणी में अनुरोध के अनुसार।
साथ ही मिलानों को क्रमबद्ध करने का तरीका प्रदर्शित करते हुए पहले (और NULLS LAST )।

SELECT id, title
      ,substring(title FROM '(?i)(^.*)deep.*space.*') AS sub1
      ,length(substring(title FROM '(?i)(^.*)deep.*space.*')) AS pos1

      ,substring(title FROM '(?i)^.*(?=deep.*space.*)') AS sub2
      ,length(substring(title FROM '(?i)^.*(?=deep.*space.*)')) AS pos2

      ,substring(title FROM '(?i)^.*(deep.*space.*)') AS sub3
      ,position((substring(title FROM '(?i)^.*(deep.*space.*)')) IN title) AS p3

      ,regexp_replace(title, 'deep.*space.*', '','i') AS reg4
      ,length(regexp_replace(title, 'deep.*space.*', '','i')) AS pos4
FROM   book
ORDER  BY title ILIKE '%deep%space%' DESC NULLS LAST
         ,length(regexp_replace(title, 'deep.*space.*', '','i'));

आप उपरोक्त सभी के लिए दस्तावेज़ यहां में पा सकते हैं। ए> और यहां

-> 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. स्तंभ नाम END के साथ END पर या उसके निकट सिंटैक्स त्रुटि

  3. पोस्टग्रेएसक्यूएल में एलपीएडी () फ़ंक्शन

  4. CSV फ़ाइल डेटा को PostgreSQL तालिका में कैसे आयात करें?

  5. प्रत्येक माह के लिए समय के अनुसार लेबल के साथ चिह्नित उपयोगकर्ता