मुझे 2 वर्णों ("[" और "]" ) के बीच सबस्ट्रिंग निकालने की आवश्यकता है, लेकिन केवल अंतिम पुनरावृत्ति के लिए।
यहाँ उदाहरण:
╔═════════════════════════════════════════════════════════════════════════════════════╦═══════════════════╗
║ Text ║ Expected result ║
╠═════════════════════════════════════════════════════════════════════════════════════╬═══════════════════╣
║ :OR1[253427815][11 Sep 2020][000685f383][Craft Labor ST][Standard] ║ Standard ║
╠═════════════════════════════════════════════════════════════════════════════════════╬═══════════════════╣
║ :OR1[252348249][11 Sep 2020][0006ff85383][Craft Labor-Allowance][Skill Rate 7] ║ Skill Rate 7 ║
╠═════════════════════════════════════════════════════════════════════════════════════╬═══════════════════╣
║ :OR1[2545528250][11 Sep 2020][00068ff5383][Craft Labor-Allowance][Attendance] ║ Attendance ║
╠═════════════════════════════════════════════════════════════════════════════════════╬═══════════════════╣
║ :OR1[2528454248][11 Sep 2020][000685383][Craft Labor-Allowance][Overtime] ║ Overtime ║
╠═════════════════════════════════════════════════════════════════════════════════════╬═══════════════════╣
║ :OR1[25254548247][11 Sep 2020][000685383][Craft Labor-Allowance][Weather Allowance] ║ Weather Allowance ║
╚═════════════════════════════════════════════════════════════════════════════════════╩═══════════════════╝
मैंने सबस्ट्रिंग और charindex के संयोजन के साथ प्रयास किया है:
SELECT text, SUBSTRING( text, CHARINDEX( '][', text) + 2, 11 ) AS Expected_result
लेकिन मुझे लगता है कि मुझे इसे सही खोजने के लिए करना चाहिए और "][" संयोजन खोजने के बाद केवल आखिरी "]" को छोड़कर सबकुछ प्राप्त करना चाहिए
इसका कोई मतलब भी है क्या? पहले खोजने तक सही फॉर्म का चयन करें] [और फिर आखिरी को छोड़कर सब कुछ प्राप्त करें]
2 जवाब
ये कोशिश करें:
SELECT REPLACE(RIGHT([text], CHARINDEX('[]', REVERSE([text]))-1), ']', '') AS Expected_result
एक तरीका है:
select replace(s.value, ']', '')
from t cross apply
string_split(t.text, '[') s
where t.text like concat('%$[', s.value) escape '$';
पुराने संस्करणों में एक विकल्प:
select t.*, replace(replace(v.str, '[', ''), ']', '')
from t cross apply
(values (stuff(t.text, 1, len(t.text) - charindex('[', reverse(t.text)), ''))) v(str);
यहां एक db<>fiddle है।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।