2016-05-30 15 views
12
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 

Hallo angesichts der obigen Tmptable und Select-Anweisung, wird das Ergebnis wie folgt sein.Wählen Sie den richtigen Buchstaben aus einer Zeichenfolge

  a   |  b 
------------------------------------------------------- 
    ,[Undergraduate  |  1] 
    ,[Undergraduate  |  10] 
    ,[Undergraduate  |  11] 

Allerdings möchte ich es so sein.

  a   |  b 
------------------------------------------------------- 
    ,[Undergraduate  |  1 
    ,[Undergraduate  |  10 
    ,[Undergraduate  |  11 

Wie kann ich das erreichen? Ich habe viel Kombination mit PATINDEX, LINKS, RECHTS, SUBSTRING, LEN versucht. aber kann nicht rechts von der] in Spalte B

+0

'SUBSTRING (m, PATINDEX ('% [0-9]%', m), LEN (m) - 1)'? –

Antwort

8

können Sie ersetzen, um die zu entfernen]. Vertrackt, aber es erreicht, was Sie

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

Alternative wollen: die Zeichenfolge umkehren, Teilzeichen 1. Zeichen zu entfernen, rückwärts zurück

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 
3

Sie REPLACE können ] mit ''

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

Ich bin geneigt, stuff() für diesen Zweck zu verwenden:

select replace(stuff(m, 1, patindex(m, '%[0-9]%'), ''), ']', '') 
2

Hier ist ein alternativer Ansatz, der jeden Text streift und nur die Zahlen hinterlässt.

SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1) 
FROM (
    SELECT subsrt = SUBSTRING(m, pos, LEN(m)) 
    FROM (
     SELECT m, pos = PATINDEX('%[0-9]%', m) 
     FROM #tmpTbl 
    ) d 
) t