tsql - Ignore last character when comparing strings -
मेरे पास निम्न स्ट्रिंग हैं जो मैं तुलना करना चाहता हूं:
DECLARE @ a VARCHAR (20) , @ बी VARCHAR (20) SET @ ए = '05Y2203-B10' --SET @ ए = '05Y2203-B10B' SET @ बी = '05 यॉ 2203-बी 10 सी' जब तुलना करते हैं, मैं आखिरी चरित्र को अनदेखा करना चाहता हूं, लेकिन केवल अगर - 4 के बाद सबस्ट्रिंग की लंबाई 4 है। '05Y2203-B10B' --इग्नेर द 'बी '05 यॉ 2203-बी 10' - '0' को अनदेखा न करें कुछ उदाहरण:
'05Y2203-B10B' = '05 या 2203-बी 10 बी '- मैच' 05 या 2203-बी 10 बी '=' 05 यॉ 2203-बी 10 सी '- मैच' 05 यॉ 2203-बी 10 '=' 05 यॉ 2203-बी 10 बी '- मैच' 05 यॉ 2203-बी 10 '=' 05 या 2203-बी -11 '- कोई मैच' 05 या -2203- B10 '=' 18G9987-B10 '- कोई मेल स्ट्रिंग हमेशा निम्न में से किसी एक पैटर्न की तरह दिखाई देगी:
'% - [AZ ] [0- 9] [0- 9] '- पिछले चरित्र'% - [एजेड] [0- 9] [0- 9] [एजी] 'के साथ- पिछले चरित्र के साथ - से पहले सबस्ट्रिंग की लंबाई अलग-अलग हो सकती है। अब तक मुझे इस सोल्यूटी पर:
SELECT 1 जहां जब लैन (SUBSTRING (@ एक, CHARINDEX ('-', @ ए) + 1, 4)) = 4 तब SUBSTRING (@ ए, 1, लैन (@ ए) - 1) ELSE @ ए ई डी = मामला जब लैन (SUBSTRING (@ बी, CHARINDEX ('-', @ बी) + 1, 4)) = 4 THEN SUBSTRING (@ बी, 1, एलएएन (@ बी ) - 1) ELSE @ बी END यह काम करता है लेकिन यह काफी पठनीय नहीं है, खासकर अगर क्वेरी में अधिक शर्तें हैं
क्या इस समस्या के लिए कोई सरल या अधिक सुरुचिपूर्ण समाधान है?
चूंकि - के बाद उप-स्ट्रिंग की लंबाई या तो 3 या 4 है, आप केवल - के बाद 3 अक्षर प्राप्त कर सकते हैं। यहां कोड स्निपेट है LEFT (@ ए, चारिंडएक्स ('-', @ ए) + 3) = LEFT (@ बी, चार्डीएक्स ('-', @ बी) + 3) < / कोड>
Comments
Post a Comment