sql-server-2005:如何对管道分隔的字符串变量执行拆分?

sql-server-2005:如何对管道分隔的字符串变量执行拆分?,sql,string,sql-server-2005,Sql,String,Sql Server 2005,我有如下简单数据: declare @string varchar(500) = "val1|val2|val3" 我如何将其拆分为cte或类似内容,以便在以后的查询中使用它: select col1 from table where col2 = @valFromCTE 这是一种有用且简单的方法,可以像查询表一样查询带分隔符的字符串 摘自: 这是一种有用且简单的方法,可以像查询表一样查询带分隔符的字符串 摘自: 使用拆分函数。你可以在我的回答中看到一个例子:好的,我有点小麻烦,因为我的

我有如下简单数据:

declare @string varchar(500) = "val1|val2|val3"
我如何将其拆分为cte或类似内容,以便在以后的查询中使用它:

select col1 from table where col2 = @valFromCTE

这是一种有用且简单的方法,可以像查询表一样查询带分隔符的字符串

摘自:


这是一种有用且简单的方法,可以像查询表一样查询带分隔符的字符串

摘自:


使用拆分函数。你可以在我的回答中看到一个例子:好的,我有点小麻烦,因为我的是一个原始输入字符串。虽然如此,我正在查看数字表,我正在使用拆分函数。你可以在我的回答中看到一个例子:好吧,我有点小问题,因为我的是一个原始输入字符串。尽管如此,我在看数字表,我只是为了学究,而在小字符串上,这可能是不相关的,我会意识到在较大字符串上循环方法的性能影响。虽然我对INT值做了这项工作,但去年我比较了各种拆分方法的性能,您应该检查结果:只是为了学究,而在小字符串上,这可能是不相关的,我会意识到在较大字符串上循环方法的性能影响。当我对INT值执行此操作时,我比较了去年各种拆分方法的性能,您应该检查结果:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fn_ParseCSVString]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fn_ParseCSVString]
GO


create function fn_ParseCSVString
(
@CSVString  varchar(8000) ,
@Delimiter  varchar(10)
)
returns @tbl table (s varchar(1000))
as
/*
select * from dbo.fn_ParseCSVString ('qwe,c,rew,c,wer', ',c,')
*/
begin
declare @i int ,
    @j int
    select  @i = 1
    while @i <= len(@CSVString)
    begin
        select  @j = charindex(@Delimiter, @CSVString, @i)
        if @j = 0
        begin
            select  @j = len(@CSVString) + 1
        end
        insert  @tbl select substring(@CSVString, @i, @j - @i)
        select  @i = @j + len(@Delimiter)
    end
    return
end


GO