मैंने एक फ़्रेज़र लिखा है जो एक टुकड़े को पूरा करने के बाद छोटे टुकड़ों में काफी लंबी स्ट्रिंग का वाक्यांश दे रहा है, यह उसे @ इनपुट से हटा देता है और जारी रहता है, जब तक कि वह किसी भी को खोजने में सक्षम न हो वाक्यांश के लिए आइटम। मैं LIKE पैटर्न के आधार पर आइटम का चयन कर रहा हूं।पैटर्न पैटर्न टी-एसक्यूएल
कुछ मामलों में, हालांकि यह संदेश के कुछ अन्य हिस्सों का चयन कर रहा है, और फिर यह infinitive पाश में समाप्त होता है।
(कोई भी संख्या 1 से 9 तक) + (चर लंबाई AZ केवल) + '/' + (चर:
पैटर्न मैं के लिए की तरह खंड का उपयोग कर चयन किया जाना रहा हूँ के प्रारूप में है लंबाई केवल एजेड) + सीआर या एलएफ या सीआरएलएफ की जगह।
--This is what I do have:
DECLARE @match NVarChar(100)
SET @match = '%[1-9][a-z]%'
DECLARE @input1 varchar(max),@input2 varchar(max)
SET @input1 ='1ABCD/EFGH *W/17001588 *RHELLO SMVML1C'
DECLARE @position Int
SET @position = PATINDEX(@match, @input1);
SELECT @position;
--after the loop- it is also 'catching' the 1C at the end of the string:
SET @input2 = '*W/17001588 *RHELLO SMVML1C'
SET @position = PATINDEX(@match, @input2);
SELECT @position
---In order to eliminate this, I have tried to change @match:
SET @match = '%[1-9][a-z][/][a-z]%'
SET @position = PATINDEX(@match, @input1);
SELECT @position --postion is 0, so the first item, that should have been selected, wasn't selected
SET @position = PATINDEX(@match, @input2);
SELECT @position --postion is 0
मदद के लिए बहुत धन्यवाद!
T-SQL नियमित अभिव्यक्ति नहीं है या किसी अन्य में निर्मित पैटर्न मैचर जो आप चाहते हैं वह करेगा। विशेष रूप से "किसी भी संख्या" और "चर लंबाई" भागों में समस्याएं पैदा करने जा रही हैं। –
तो आपके नए मैच पर, '@ इनपुट 1'' के लिए, 'स्थिति' 1 होना चाहिए और '@ इनपुट 2' के लिए, 'स्थिति' 0 होना चाहिए? सही बात? –
आप PATINDEX की सीमित क्षमताओं का उपयोग करके ऐसे इनपुट को पार्स नहीं कर सकते हैं। आपको या तो कोड में नियमित अभिव्यक्तियों का उपयोग करना चाहिए या एक वास्तविक पार्सर लिखना चाहिए। –