在与数据库交互的过程中,我们经常需要把一串ID组成的字符串当作参数传给存储过程获取数据。很多时候我们希望把这个字符串转成集合以方便用于in操作。 有两种方式可以方便地把这个以某种符号分隔的ID字符串转成临时表。
方式一:通过charindex和substring。
代码
/************************************************************
* Code formatted by SoftTree SQL Assistant ?v6.5.278
* Time: 2015/8/4 11:22:40
************************************************************/
* Code formatted by SoftTree SQL Assistant ?v6.5.278
* Time: 2015/8/4 11:22:40
************************************************************/
CREATE FUNCTION func_splitstring
(
@str NVARCHAR(MAX),
@split VARCHAR(10)
)
RETURNS @t TABLE(c1 VARCHAR(100))
AS
BEGIN
DECLARE @i INT
DECLARE @s INT
SET @i = 1
SET @s = 1
WHILE (@i > 0)
BEGIN
SET @i = CHARINDEX(@split, @str, @s)
IF (@i > 0)
BEGIN
INSERT @t
(
c1
)
VALUES
(
SUBSTRING(@str, @s, @i -@s)
)
END
ELSE
BEGIN
INSERT @t
(
c1
)
VALUES
(
SUBSTRING(@str, @s, LEN(@str) -@s + 1)
)
END
SET @s = @i + 1
END
RETURN
END
(
@str NVARCHAR(MAX),
@split VARCHAR(10)
)
RETURNS @t TABLE(c1 VARCHAR(100))
AS
BEGIN
DECLARE @i INT
DECLARE @s INT
SET @i = 1
SET @s = 1
WHILE (@i > 0)
BEGIN
SET @i = CHARINDEX(@split, @str, @s)
IF (@i > 0)
BEGIN
INSERT @t
(
c1
)
VALUES
(
SUBSTRING(@str, @s, @i -@s)
)
END
ELSE
BEGIN
INSERT @t
(
c1
)
VALUES
(
SUBSTRING(@str, @s, LEN(@str) -@s + 1)
)
END
SET @s = @i + 1
END
RETURN
END
执行:select * from dbo.func_splitstring('1,2,3,4,5,6', ',')