इसे 2 चरणों में विभाजित करें:
- संख्या की शुरुआत तक सब कुछ छोड़ दें (यहाँ मैंने 3 अंक न्यूनतम मान लिए हैं)
- फिर सब कुछ अगले गैर-संख्यात्मक अंक तक ले जाएं
आपको LEFT के लिए एक CASE की आवश्यकता होगी क्योंकि संख्या अंत में है क्योंकि PATINDEX शून्य पर लौटेगा
DECLARE @MyTable TABLE (bigstring varchar(200))
INSERT @MyTable VALUES ('F:\MassHunter\DATA\6897_Pan_1\QuantResults\6897_Pan_1.batch.bin')
INSERT @MyTable VALUES ('F:\MassHunter\DATA\6897_Pan_1\QuantResults\6897_Pan_1.batch.bin')
INSERT @MyTable VALUES ('10914_Excel Short Summary.xls')
SELECT --assumes number not at end of string
LEFT(startOf, PATINDEX('%[^0-9]%', startof)-1)
FROM
(
SELECT --assumed 3 digits minimum
SUBSTRING(bigstring, PATINDEX('%[0-9][0-9][0-9]%', bigstring), 8000) AS startOf
FROM
@MyTable
) foo