2017-07-05 52 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))