2016-05-30 39 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 

Salvo data la dichiarazione sopra tmptable e selezionare, il risultato sarà il seguente.selezionando la lettera corretta da una stringa

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

Tuttavia, voglio che sia così.

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

Come posso ottenerlo? Ho provato un sacco di combinazione con PATINDEX, SINISTRA, DESTRA, SUBSTRING, LEN. ma non posso andare a destra del] nella colonna B

+0

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

risposta

8

è possibile utilizzare sostituire per rimuovere il]. Dodgy, ma realizza ciò che si vuole

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

alternativa: invertire la stringa, sottostringa di rimuovere 1 ° car, inversione

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

È possibile utilizzare REPLACE per sostituire ] con ''

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

Sono incline a utilizzare stuff() per questo scopo:

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

Ecco un approccio alternativo che rimuoverà qualsiasi testo e lascerà solo i numeri.

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