使用patindex在字符串变量中分隔数字

时间:2017-07-05 07:12:00

标签: sql stored-procedures

我这里有一个简短的问题。

我有这样的价值

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

我的代码出了什么问题?还是不可能?请帮帮我。

2 个答案:

答案 0 :(得分: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))

答案 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