SQL 表值函数 做Split用

来源:互联网 发布:php环境一键安装包 编辑:程序博客网 时间:2024/06/07 01:04

需求


传入字符串A,B,C,D,E

到SQL做 字段 in (A,B,C,D,E) 的时候,因为是字符串需要变成'A','B','C','D','E'

这样处理很麻烦


然后在SQL里面创建一个表值函数


USE [ZemtProcess]
GO
/****** Object:  UserDefinedFunction [dbo].[f_split]    Script Date: 06/06/2017 15:53:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   function   [dbo].[f_split](@c   nvarchar(2000),@split   Nvarchar(2))   
  returns   @t   table(ID int,colName   Nvarchar(50))   
  as   
    begin   
      declare @i int
      set @i=1
      while(charindex(@split,@c)<>0)   
        begin   
          insert   @t(ID,colName)   values   (@i,substring(@c,1,charindex(@split,@c)-1))   
          set   @c   =   stuff(@c,1,charindex(@split,@c),'')   
          set @i=@i+1
        end   
      insert   @t(ID,colName)   values   (@i,@c)   
      return   
    end   
    


使用的时候 select * from [dbo].[f_split]('A,B,C,D,E',',')


执行下输出结果就和查询表结果一样

ID    colName

1    A

2   B

最终SQL

字段 in (select  colName from [dbo].[f_split]('A,B,C,D,E',',')