从字符串中选择正确的字母

Dev*_*ora 12 sql t-sql sql-server substring patindex

CREATE TABLE #tmpTbl (m VARCHAR(100))  
INSERT INTO #tmpTbl VALUES
 (',[Undergraduate1]')    
,(',[Undergraduate10]')   
,(',[Undergraduate11]')   
;
GO

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
         SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)) as b from #tmpTbl


drop table #tmpTbl
Run Code Online (Sandbox Code Playgroud)

您好了上面的tmptable和select语句,结果如下.

           a            |      b
-------------------------------------------------------
    ,[Undergraduate     |      1]
    ,[Undergraduate     |      10]
    ,[Undergraduate     |      11]
Run Code Online (Sandbox Code Playgroud)

但是我希望它是这样的.

           a            |      b
-------------------------------------------------------
    ,[Undergraduate     |      1
    ,[Undergraduate     |      10
    ,[Undergraduate     |      11
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这一目标?我尝试了很多与PATINDEX,LEFT,RIGHT,SUBSTRING,LEN的组合.但是在B栏中无法正确

Nic*_*ias 8

你可以用replace来删除].狡猾,但它实现了你想要的

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
     REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)),']','') as b from #tmpTbl
Run Code Online (Sandbox Code Playgroud)

替代方法:反转字符串,子串以删除第一个字符,反向返回

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
         REVERSE(SUBSTRING(REVERSE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m))),2,LEN(M))) as b from #tmpTbl
Run Code Online (Sandbox Code Playgroud)