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'中选择*其中的数字