【SQL Server】在SQL中实现分割字符串功能(类似Split)
分类:数据库| 发布:camnprbubuol| 查看: | 发表时间:2010/9/30
很多程序语言都有split函数,使用分隔符把字符串分割为一个数组。在SQL中我们也经常有这种需求。比如订单列表显示,当我们选择一些订单,删除id为10,20,30,40的订单。我们希望把这些订单id组成一个字符串:10-20-30-40.传递到一个存储过程。由存储过程解析,进行相应删除工作。
实现Split功能的存储过程:
- CREATE PROCEDURE ParseArray (@Array VARCHAR(1000),@separator CHAR(1))
- AS
-
- BEGIN
- SET NOCOUNT ON
-
- DECLARE @separator_position INT
- DECLARE @array_value VARCHAR(1000)
-
- SET @array = @array + @separator
-
-
- WHILE PATINDEX(’%’ + @separator + ’%’, @array) <> 0
- BEGIN
-
- SELECT @separator_position = PATINDEX(’%’ + @separator + ’%’,@array)
- SELECT @array_value = LEFT(@array, @separator_position - 1)
-
- SELECT Array_Value = @array_value
-
- SELECT @array = STUFF(@array, 1, @separator_position, ’’)
- END
- SET NOCOUNT OFF
- END
-
- GO
使用:
- exec ParseArray ’10-20-30-40’,’-’
实现Split功能的用户自定义函数:
- CREATE FUNCTION dbo.fnParseArray (@Array VARCHAR(1000),@separator CHAR(1))
- RETURNS @T Table (col1 varchar(50))
- AS
- BEGIN
-
- DECLARE @separator_position INT
- DECLARE @array_value VARCHAR(1000)
-
- SET @array = @array + @separator
-
-
- WHILE PATINDEX(’%’ + @separator + ’%’, @array) <> 0
- BEGIN
-
- SELECT @separator_position = PATINDEX(’%’ + @separator + ’%’,@array)
- SELECT @array_value = LEFT(@array, @separator_position - 1)
-
- INSERT into @T VALUES (@array_value)
-
- SELECT @array = STUFF(@array, 1, @separator_position, ’’)
- END
- RETURN
- END
使用示例:
- select * from dbo.fnParseArray(’10-20-30-40’, ’-’)
原载:IT智库网