gpt4 book ai didi

sql - 在 SQL Server 存储过程中使用带有通配符的单词列表

转载 作者:行者123 更新时间:2023-12-04 06:21:27 24 4
gpt4 key购买 nike

我有一个要从某些查询结果中排除的单词列表。单词列表作为逗号分隔列表存储在数据库表中。例如。坏的,可怕的,最坏的。 ( 注意 :它们用逗号分隔并不重要。它们可以很容易地成为表中的行)。

我希望能够在存储过程中使用此单词列表,以确保此列表中的关键字不会出现在我的搜索结果中的任何位置。例如,鉴于以下情况,我将如何修改我的查询以确保所有搜索结果都针对出现在我的关键字排除列表中的单词进行过滤?

create table #keywords (column1 varchar(500))

insert #keywords values('bad, awful, worst')

create table #testData (column1 varchar(100))

insert #testData values('This is bad for you')
insert #testData values('This is good for you')
insert #testData values('This is awful for you')
insert #testData values('This is great for me')

SELECT * FROM #testData WHERE column1 like '%you%'

drop table #keywords

drop table #testData

正如您可能猜到的那样,我想确保排除列表中的每个关键字都在通配符 (%) 中使用,以确保该词不会出现在搜索结果的任何地方。我也意识到 SQL 注入(inject)的危险,并且很想看到一种方法来最小化任何风险。

任何帮助表示赞赏。这将在 SQL Server 2005 及更高版本上运行。

编辑 - 我主要关心的不是逗号分隔的列表,而是更多使用它包含的值以及通配符从我的查询结果中排除特定项目的方法。

最佳答案

首先,我不会将关键字存储为 CSV。您在数据库中,使用它!

尝试类似:

create table #keywords (column1 varchar(500))

insert #keywords values('bad')
insert #keywords values('awful')
insert #keywords values('worst')

create table #testData (column1 varchar(100))

insert #testData values('This is bad for you')
insert #testData values('This is good for you')
insert #testData values('This is awful for you')
insert #testData values('This is great for me')

select *
from #testData t
where column1 like '%you%'
and not exists (
select *
from #keywords k
where t.column1 like '%' + k.column1 + '%'
)

drop table #keywords

drop table #testData

关于sql - 在 SQL Server 存储过程中使用带有通配符的单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503356/

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