Sql server 如何在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 *
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
我创建了用于测试的诱惑,这个查询将返回如下输出