gpt4 book ai didi

sql-server - 当过滤器是逗号分隔的值列表时如何过滤记录

转载 作者:行者123 更新时间:2023-12-02 22:35:26 24 4
gpt4 key购买 nike

我有一个表,其中有一列包含一串逗号分隔值 (CSV)。

例如值1、值2、值3

作为过滤器传入的是另一组 CSV。

例如值2、值3

因此,在上面的示例中,查询应返回 CSV 列中包含任何过滤器值的所有记录。

示例

declare @table table
(
rownum int,
csv nvarchar(300)
)

insert into @table values (1,'VALUE1, VALUE2, VALUE3')
insert into @table values (2,'VALUE1, VALUE2')
insert into @table values (3,'VALUE1, VALUE3')
insert into @table values (4,'VALUE3, VALUE4')
insert into @table values (5,'VALUE1, VALUE2, VALUE3')
insert into @table values (6,'VALUE3, VALUE4, VALUE2')
insert into @table values (7,'VALUE3')

declare @Filter nvarchar(50)

set @Filter = 'VALUE1,VALUE2'

select * from @table

因此,在上面的示例中,查询应返回第 1、2、3、5 和 6 行,因为它们都包含 VALUE1 或 VALUE2。

最佳答案

如果我理解得很好,这将解决它:

您创建一个函数来执行拆分:

CREATE FUNCTION [dbo].[ufn_CSVToTable] ( @StringInput VARCHAR(8000), @Delimiter nvarchar(1))
RETURNS @OutputTable TABLE ( [String] VARCHAR(10) )
AS
BEGIN

DECLARE @String VARCHAR(10)

WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput) - 1, -1),
LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(@Delimiter, @StringInput), 0),
LEN(@StringInput)) + 1, LEN(@StringInput))

INSERT INTO @OutputTable ( [String] )
VALUES ( @String )
END

RETURN
END
GO

然后你可以这样做:

declare @table table
(
rownum int,
csv nvarchar(300)
)

insert into @table values (1,'VALUE1, VALUE2, VALUE3')
insert into @table values (2,'VALUE1, VALUE2')
insert into @table values (3,'VALUE1, VALUE3')
insert into @table values (4,'VALUE2, VALUE3')
insert into @table values (5,'VALUE1, VALUE2, VALUE3')
insert into @table values (6,'VALUE3, VALUE1, VALUE2')
insert into @table values (7,'VALUE2, VALUE1')

declare @Filter nvarchar(50)

set @Filter = 'VALUE3,VALUE4'

select * from @table
SELECT * INTO #FilterTable FROM ufn_CSVToTable(@Filter, ',')
SELECT * FROM #FilterTable
select * from @table where EXISTS(SELECT String FROM #FilterTable WHERE csv like '%' + String + '%')
DROP TABLE #FilterTable

我正在考虑描述“返回包含过滤器中任何计算的任何行”

关于sql-server - 当过滤器是逗号分隔的值列表时如何过滤记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17340258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com