ऐसा करने का एक तरीका (कई में से):मैच से शुरू होने वाली बाकी स्ट्रिंग को हटा दें और काटे गए स्ट्रिंग की लंबाई को मापें:
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 सभी का प्रदर्शन।