去除字符串中连续的分割符的函数,但在数据量比较大的时候,尽量避免使用自定义函数,以免严重影响性能。

SQL代码:

 
  1. --创建函数
  2. create function [dbo].[m_delrepeatsplit]
  3. (
  4.     @str varchar(2000),
  5.     @split nvarchar(200)
  6. )
  7. returns nvarchar(2000)
  8. as   
  9. begin
  10.     --begin declare   
  11.        declare @count int,@i int,@isnull int
  12.        declare @newchar nvarchar(200),@nn nvarchar(300)
  13.        set @count=len(@str);set @i=1;set @isnull=1;set @nn='';
  14.     --end declare
  15.     --begin while
  16.        while @i<@count+1
  17.        begin
  18.            set @newchar=substring(@str,@i,1)
  19.            if(@isnull=1)
  20.            begin
  21.               set @nn=@nn+@newchar;    
  22.               if(@newchar=@split)
  23.                   begin
  24.                      set @isnull=0;
  25.                   end
  26.               else
  27.                   begin
  28.                      set @isnull=1;
  29.                   end    
  30.            end
  31.            else
  32.               begin
  33.                   if(@newchar=@split)
  34.                      begin
  35.                          set @isnull=0;
  36.                      end
  37.                   else
  38.                      begin
  39.                          set @nn=@nn+@newchar;    
  40.                          set @isnull=1;
  41.                      end    
  42.               end
  43.            set @i=@i+1;
  44.        end
  45.     --end while
  46.     return  @nn 
  47. end
  48.  
  49. --2、测试示例
  50. declare @str nvarchar(200)
  51. set @str='1  2 3    4 555 6  7    7';
  52. declare @split nvarchar(200)
  53. set @split=' ';
  54. select dbo.m_delrepeatsplit(@str,@split) as newchar
  55.  
  56. --3、运行结果
  57. /*
  58. newchar
  59. ------------------
  60. 1 2 3 4 555 6 7 7
  61. */

原文链接:blog.csdn.net/maco_wang/archive/2011/03/16/6254955.aspx