मुझे 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

लेकिन मुझे लगता है कि मुझे इसे सही खोजने के लिए करना चाहिए और "][" संयोजन खोजने के बाद केवल आखिरी "]" को छोड़कर सबकुछ प्राप्त करना चाहिए

इसका कोई मतलब भी है क्या? पहले खोजने तक सही फॉर्म का चयन करें] [और फिर आखिरी को छोड़कर सब कुछ प्राप्त करें]

0
Baldie47 10 सितंबर 2020, 14:08

2 जवाब

सबसे बढ़िया उत्तर

ये कोशिश करें:

SELECT REPLACE(RIGHT([text], CHARINDEX('[]', REVERSE([text]))-1), ']', '') AS Expected_result

SqlFiddle

1
Maciej Los 10 सितंबर 2020, 14:19

एक तरीका है:

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 है।

2
Gordon Linoff 10 सितंबर 2020, 14:34