Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQL Server中的每个拆分项上获取带引号的拆分字符串?_Sql Server_Stored Procedures - Fatal编程技术网

Sql server 如何在SQL Server中的每个拆分项上获取带引号的拆分字符串?

Sql server 如何在SQL Server中的每个拆分项上获取带引号的拆分字符串?,sql-server,stored-procedures,Sql Server,Stored Procedures,如何在SQL Server中的每个拆分项上获取带引号的拆分字符串?我试过这个 declare @departmentNames as varchar(max) = 'Account, hod' --declare @departmentNames as varchar(max) = 'Account'+', '+'hod' print @departmentNames 我得到这样的结果=>帐户,hod 但我希望它是这样的=>'Account','hod' 这样我就可以用在 select *

如何在SQL Server中的每个拆分项上获取带引号的拆分字符串?我试过这个

declare @departmentNames as varchar(max) = 'Account, hod'
--declare @departmentNames as varchar(max) = 'Account'+', '+'hod'
print @departmentNames
我得到这样的结果=>帐户,hod

但我希望它是这样的=>'Account','hod'

这样我就可以用在

select * 
from tblDepartment 
where name in (select item from splitString(@departmentNames, ','))
我知道如果我在id列中使用整数,它会工作得很好,即=>1,2,3,4,但我想在字符串中尝试一下

有人能帮我吗?

你可以使用apply:

如果需要字符串比较,可以进行串联

注意:在调用UDF函数时使用架构名称

您可以使用应用:

如果需要字符串比较,可以进行串联


注意:在调用UDF函数时使用架构名称

首先创建此函数:

CREATE FUNCTION [dbo].[fn_Split]
     (@String varchar(8000), 
      @Delimiter varchar(50))          
RETURNS @temptable TABLE (items varchar(8000))          
AS
BEGIN
    /*  
    SELECT * FROM dbo.fn_Split('12345;thome', ';')  
    */          
    DECLARE @idx int          
    DECLARE @slice varchar(8000)          
    DECLARE @delimiterLength int  

    SET @delimiterLength = len(@Delimiter)  

    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 (LTRIM(RTRIM(@slice)))

        SET @String = RIGHT(@String, LEN(@String) - @idx - @delimiterLength + 1)          
        IF LEN (@String) = 0 
             BREAK
    END

    RETURN
END
然后传递变量并将其与此函数一起使用join

使用表别名以便于理解

declare @departmentNames as varchar(max) = ('Account,     hod')

 select t.* 
 from tblDepartment t
 inner join 
     (Select items 
      from dbo.fn_Split (@departmentNames, ',')) A on t.name = A.items  
我创建了用于测试的诱惑,这个查询将返回如下输出


首先创建此函数:

CREATE FUNCTION [dbo].[fn_Split]
     (@String varchar(8000), 
      @Delimiter varchar(50))          
RETURNS @temptable TABLE (items varchar(8000))          
AS
BEGIN
    /*  
    SELECT * FROM dbo.fn_Split('12345;thome', ';')  
    */          
    DECLARE @idx int          
    DECLARE @slice varchar(8000)          
    DECLARE @delimiterLength int  

    SET @delimiterLength = len(@Delimiter)  

    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 (LTRIM(RTRIM(@slice)))

        SET @String = RIGHT(@String, LEN(@String) - @idx - @delimiterLength + 1)          
        IF LEN (@String) = 0 
             BREAK
    END

    RETURN
END
然后传递变量并将其与此函数一起使用join

使用表别名以便于理解

declare @departmentNames as varchar(max) = ('Account,     hod')

 select t.* 
 from tblDepartment t
 inner join 
     (Select items 
      from dbo.fn_Split (@departmentNames, ',')) A on t.name = A.items  
我创建了用于测试的诱惑,这个查询将返回如下输出