在软件中体悟人生 在人生中感悟软件

专注Web项目设计、实现和管理
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

SqlServer Split功能函数

Posted on 2010-08-13 11:08  王景  阅读(547)  评论(0编辑  收藏  举报


/*========================================================
函数名称:f_SplitToGuid
作 用:实现split功能 的函数
更新记录:
   1、 ******                
设计思路:将nvarchar类型字符结合的一个串,分隔到一张只有一列nvarchar类型的表里
 =========================================================*/
ALTER function [dbo].[f_SplitToNvarchar]
(
@SourceSql nvarchar(max),--源分隔字符串
@StrSeprate varchar(10)--分隔符
)
returns @temp table(a nvarchar(max))
as
begin
    declare @i int
    set @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    while @i>=1
    begin
        insert @temp values(left(@SourceSql,@i-1))
        set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
        set @i=charindex(@StrSeprate,@SourceSql)
    end
    if @SourceSql<>'\'
       insert @temp values(@SourceSql)
    return
end

 

/*========================================================
函数名称:f_SplitToInt
作 用:实现split功能 的函数
更新记录:
   1、 ******                
设计思路:将int类型字符组合的一个串,分隔到一张只有一列int类型的表里
 =========================================================*/
ALTER function [dbo].[f_SplitToInt]
(
@SourceSql varchar(max),--源分隔字符串
@StrSeprate varchar(10)--分隔符
)
returns @temp table(a int)
as
begin
    declare @i int
    set @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    while @i>=1
    begin
        insert @temp values(left(@SourceSql,@i-1))
        set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
        set @i=charindex(@StrSeprate,@SourceSql)
    end
    if @SourceSql<>'\'
       insert @temp values(@SourceSql)
    return
end

 

/*========================================================
函数名称:f_SplitToGuid
作 用:实现split功能 的函数   
 =========================================================*/
ALTER function [dbo].[f_SplitToGuid]
(
@SourceSql nvarchar(max),--源分隔字符串
@StrSeprate varchar(10)--分隔符
)
returns @temp table(a uniqueidentifier)
as
begin
    declare @i int
    set @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    while @i>=1
    begin
        insert @temp values(left(@SourceSql,@i-1))
        set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
        set @i=charindex(@StrSeprate,@SourceSql)
    end
    if @SourceSql<>'\'
       insert @temp values(@SourceSql)
    return
end

 

/*========================================================

调用例子:

  =========================================================*/

CREATE PROC  [dbo].[GetSolutionByEnNameList]
 @EnNameList Nvarchar(max)
as
begin

 SELECT    ID,EnName
 FROM    A
 WHERE  A.EnName
  IN( SELECT a FROM  f_SplitToNvarchar(@EnNameList,','))
 
end