Sql 从sting中取减号(-),并在不同程序中使用

Sql 从sting中取减号(-),并在不同程序中使用,sql,sql-server,Sql,Sql Server,我有一个变量 DECLARE @Routs NVARCHAR(1024) @i int SET @Routs = N'6,4,-5,8' 我需要从这个刺中提取任何数字,在这个例子中,它前面有负号-5 并将其用作输入参数,例如在不同的存储过程中使用@i。将you's@Routs参数传递给一个表值函数,该函数将列表拆分为一个表,然后在表中循环,如果值为负数,则执行存储过程或任何您想要的操作;如果不是负数,则不执行任何操作 -通过逗号拆分参数的表函数 ALTER FUNCTION [dbo].[S

我有一个变量

DECLARE @Routs NVARCHAR(1024)
@i int 
SET @Routs = N'6,4,-5,8'
我需要从这个刺中提取任何数字,在这个例子中,它前面有负号-5
并将其用作输入参数,例如在不同的存储过程中使用@i。

将you's@Routs参数传递给一个表值函数,该函数将列表拆分为一个表,然后在表中循环,如果值为负数,则执行存储过程或任何您想要的操作;如果不是负数,则不执行任何操作

-通过逗号拆分参数的表函数

ALTER FUNCTION [dbo].[SplitListOfInts] (@list nvarchar(MAX))
RETURNS @tbl TABLE (number int NOT NULL) AS
BEGIN
DECLARE @pos        int,
       @nextpos    int,
       @valuelen   int

if len(rtrim(@list)) > 0  
begin

   SELECT @pos = 0, @nextpos = 1

   WHILE @nextpos > 0
   BEGIN
      SELECT @nextpos = charindex(',', @list, @pos + 1)
      SELECT @valuelen = CASE WHEN @nextpos > 0
                              THEN @nextpos
                              ELSE len(@list) + 1
                         END - @pos - 1
      INSERT @tbl (number)
         VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))
      SELECT @pos = @nextpos
   END
  end

  RETURN
 END
-调用拆分函数并使用@routs参数的存储过程

  CREATE TABLE #values(nbrValue int)
 INSERT INTO #values(nbrValue
 EXEC [dbo].[SplitListOfInts] @routs
-如果你不关心非负片,请在此处删除它们

 DELETE FROM #values
 where nbrValue >= 0

DECLARE @i int
DECLARE @countrows = (SELECT COUNT(nbrValue) FROM #values)

WHILE @countrows >0
SET @i = (SELECT TOP 1 nbrValue FROM #values)
…做你想做的事

DELETE FROM #values where nbrValue=@i
set @countrows = (SELECT COUNT(nbrValue) FROM #values)
END

字符串是否只包含数字???@huMptyduMpty是的,它只包含数字除以','的部分,但是数字可以包含在字符串的任何部分。您应该阅读本文。你已经为你能想出的分割函数创造了最差的执行者。这是一个带while循环的多语句表值函数。@BS123看起来您有一个有趣的解决方案,但我想我会继续查找此函数返回所有数字,但我只需要负数,我不关心主题化答案的其余部分,只需从临时表中删除它们,并删除if检查以查看它是否为负数或者不是。@BS123我是这样做的,从[SplitListOfINTs]N'2,4,-5,7'中选择*其中的数字