2017-07-05 75 views
0

我在這裏有一個小問題。使用patindex的字符串變量內部的單獨數字

我有這樣

1/11 11/1 11/11 111/1 111/11

值我試圖分離那些價值,並把它們變成數值變量。 讓說,例如,我有numericvar1numericvar2

所以在第一串numericvar1將包含1和numericvar2將包含11

等。

我已經試過像這樣

SET @numericvar1= LEFT(@StrNumHolder, PATINDEX('%[0-9][^0-9]%', @StrNumHolder)) 
SET @numericvar2= REPLACE(RIGHT(@StrNumHolder, PATINDEX('%[0-9][^0-9]%', @StrNumHolder)),'/','') 

在此代碼,如果/前的第一個數字是2位數的我得到了正確的輸出。但如果第一個數字是1位數字,下一個數字是2位數字,如1/11我得到了錯誤的輸出。像這樣var1 = 1var2 = 1

在我的代碼中做錯了什麼?或者這是不可能的?請幫幫我。

回答

0

你可以嘗試這樣的事情嗎?

DECLARE @STRNUMHOLDER VARCHAR(20) 
SET @STRNUMHOLDER='111/1' 
DECLARE @pos INT 
SET @pos = CHARINDEX('/', @STRNUMHOLDER) 
SELECT @STRNUMHOLDER AS ORIG, LEFT(@STRNUMHOLDER, @pos-1) AS NUM1, SUBSTRING(@STRNUMHOLDER, @pos+1,99) AS NUM2 
+0

我試了一下,並改變某種代碼來達到我的目標。呵呵。無論如何,我認爲我可以用這個。 'SET @pos = CHARINDEX('/',@STRNUMHOLDER)'這將表明我的位置,所以在你的選擇中,我將它修改爲'SELECT @STRNUMHOLDER AS ORIG,LEFT(@STRNUMHOLDER ,@ pos-1)AS NUM1,SUBSTRING(@STRNUMHOLDER,@ pos + 1,99)AS NUM2' – Muj

+0

我做了一個類型錯誤,同時進行了修正(我顛倒了+和 - ) – etsa

1

您可以使用CHARINDEX獲取'/'的位置,然後使用SUBSTRING分隔數字。在這裏你可以如何查詢它:

DECLARE @nIndex INT 
SELECT @nIndex = CHARINDEX('/',@StrNumHolder) 

SET @numericvar1 = SELECT SUBSTRING(@StrNumHolder,1,@nIndex-1) 
SET @numericvar2 = SELECT SUBSTRING(@StrNumHolder,@nIndex+1,LEN(@StrNumHolder))