【SQL Server】在SQL中实现分割字符串功能(类似Split)

分类:数据库| 发布:camnprbubuol| 查看: | 发表时间:2010/9/30

很多程序语言都有split函数,使用分隔符把字符串分割为一个数组。在SQL中我们也经常有这种需求。比如订单列表显示,当我们选择一些订单,删除id为10,20,30,40的订单。我们希望把这些订单id组成一个字符串:10-20-30-40.传递到一个存储过程。由存储过程解析,进行相应删除工作。

实现Split功能的存储过程:

  1. CREATE PROCEDURE ParseArray (@Array VARCHAR(1000),@separator CHAR(1))  
  2. AS   
  3.   
  4. BEGIN  
  5. SET NOCOUNT ON  
  6.   
  7.         DECLARE @separator_position INT   
  8.         DECLARE @array_value VARCHAR(1000)  
  9.   
  10.         SET @array = @array + @separator  
  11.   
  12.   
  13.         WHILE PATINDEX(’%’ + @separator + ’%’, @array) <> 0   
  14.             BEGIN  
  15.                   
  16.                 SELECT  @separator_position = PATINDEX(’%’ + @separator + ’%’,@array)  
  17.                 SELECT  @array_value = LEFT(@array, @separator_position - 1)  
  18.                  
  19.                 SELECT  Array_Value = @array_value  
  20.                  
  21.                 SELECT  @array = STUFF(@array, 1, @separator_position, ’’)  
  22.             END  
  23. SET NOCOUNT OFF  
  24. END  
  25.   
  26. GO  

使用:

  1. exec ParseArray ’10-20-30-40’,’-’  

实现Split功能的用户自定义函数:

  1. CREATE FUNCTION dbo.fnParseArray (@Array VARCHAR(1000),@separator CHAR(1))  
  2. RETURNS @T Table (col1 varchar(50))  
  3. AS  
  4. BEGIN  
  5.   
  6. DECLARE @separator_position INT   
  7. DECLARE @array_value VARCHAR(1000)   
  8.   
  9. SET @array = @array + @separator  
  10.   
  11.   
  12. WHILE PATINDEX(’%’ + @separator + ’%’, @array) <> 0  
  13. BEGIN  
  14.   
  15. SELECT @separator_position = PATINDEX(’%’ + @separator + ’%’,@array)  
  16. SELECT @array_value = LEFT(@array, @separator_position - 1)  
  17.   
  18. INSERT into @T VALUES (@array_value)  
  19.   
  20. SELECT @array = STUFF(@array, 1, @separator_position, ’’)  
  21. END  
  22. RETURN  
  23. END  

使用示例:

  1. select * from dbo.fnParseArray(’10-20-30-40’’-’)   

原载:IT智库网

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/database/51.html