用于拆分字符串的SQL查询

用于拆分字符串的SQL查询,sql,sql-server-2005,split,Sql,Sql Server 2005,Split,我有字符串“ABCD.EFGH.IJKL.MNOP”。我正在寻找一个sql查询,从中可以得到 第一部分(“ABCD”)、第二部分(“EFGH”)、第三部分(“IJKL”)、第四部分(“LMNOP”)来自大量数据。因此,必须记住性能 多谢各位 问候,, James我假设您正在寻找MSSQL。您可以使用返回表变量的用户定义函数来实现这一点。试试这个 CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))

我有字符串“ABCD.EFGH.IJKL.MNOP”。我正在寻找一个sql查询,从中可以得到

第一部分(“ABCD”)、第二部分(“EFGH”)、第三部分(“IJKL”)、第四部分(“LMNOP”)来自大量数据。因此,必须记住性能

多谢各位

问候,,
James

我假设您正在寻找MSSQL。您可以使用返回表变量的用户定义函数来实现这一点。试试这个

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))       
returns @temptable TABLE (items varchar(8000))       
as       
begin       
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return       
end  

我假设您正在寻找MSSQL。您可以使用返回表变量的用户定义函数来实现这一点。试试这个

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))       
returns @temptable TABLE (items varchar(8000))       
as       
begin       
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return       
end  

Jeff Moden最近就此撰写了一系列文章,并对满足这一共同需求的最流行尝试进行了性能比较。查看这篇文章,了解其DelimitedSplit8K函数的最新一期和最新版本

Jeff Moden最近就此写了一系列文章,并对满足这一共同需求的最流行尝试进行了性能比较。查看最新一期及其DelimitedSplit8K函数的最新版本,以明确说明:您希望按特定字符(.)进行拆分,而基于长度的拆分不起作用。是吗?是的,没错。我需要根据一个特殊字符(如“,”等)拆分字符串,并将其单独显示。可能的重复只是为了澄清:您正在寻找按特定字符(.)拆分的字符串,而基于长度的拆分将不起作用。是吗?是的,没错。我需要根据一个特殊字符(如“,”等)拆分一个字符串,并将其单独显示。非常感谢!可能重复!!如果没有自定义项,有什么方法可以使用呢?因为我必须在RDL文件中编写,单独创建函数可能是不可能的。@James:你能使用存储过程吗?非常感谢!!如果没有自定义项,有什么方法可以使用它,因为我必须在RDL文件中写入它,并且单独创建函数可能是不可能的。@James:你能使用存储过程吗?