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

こんにちは、上記の tmptable と select ステートメントを考えると、結果は次のようになります。

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

しかし、私はそれがこのようになりたいです。

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

どうすればそれを達成できますか? PATINDEX、LEFT、RIGHT、SUBSTRING、LENとの組み合わせをたくさん試しました。しかし、列Bの]を正しく取得できません

4

4 に答える 4

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

代替手段:文字列を反転し、部分文字列を削除して最初の文字を削除し、逆方向に戻す

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
于 2016-05-30T01:43:23.503 に答える
3

REPLACEに置き換え]て使用できます''

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
         REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)), ']', '') as b from #tmpTbl
于 2016-05-30T01:45:27.440 に答える
3

私はstuff()この目的のために使用する傾向があります:

select replace(stuff(m, 1, patindex(m, '%[0-9]%'), ''), ']', '')
于 2016-05-30T01:47:58.510 に答える