SQL关键字逻辑

SQL关键字逻辑,sql,tsql,Sql,Tsql,我正在研究一些逻辑,但我不知道如何使其工作。基本上我有两个SQL字符串。一个有关键词pingu,一个有noot,如下所示:它存储在关键字1-这是一个临时位置 declare @teststring varchar(512) = '{KEYWORD}' select top 1 k.type from (values ('pingu', '66'), ('noot', '66')) k(word,type) where @teststring like '%' + k.word + '%

我正在研究一些逻辑,但我不知道如何使其工作。基本上我有两个SQL字符串。一个有关键词pingu,一个有noot,如下所示:它存储在关键字1-这是一个临时位置

declare @teststring varchar(512) = '{KEYWORD}' 
select top 1 k.type 
from (values 

('pingu', '66'), ('noot', '66'))

k(word,type) where @teststring like '%' + k.word + '%' 

group by k.type 
HAVING COUNT(1) >=2
order by COUNT(1) desc
declare @teststring varchar(512) = '{KEYWORD}' 
select top 1 k.type 
from (values 

('sponge', '66'), ('bob', '66'))

k(word,type) where @teststring like '%' + k.word + '%' 

group by k.type 
HAVING COUNT(1) >=2
order by COUNT(1) desc
我的另一个字符串有两个关键字,例如:海绵和鲍勃。这存储在关键字2中,这是一个临时位置

declare @teststring varchar(512) = '{KEYWORD}' 
select top 1 k.type 
from (values 

('pingu', '66'), ('noot', '66'))

k(word,type) where @teststring like '%' + k.word + '%' 

group by k.type 
HAVING COUNT(1) >=2
order by COUNT(1) desc
declare @teststring varchar(512) = '{KEYWORD}' 
select top 1 k.type 
from (values 

('sponge', '66'), ('bob', '66'))

k(word,type) where @teststring like '%' + k.word + '%' 

group by k.type 
HAVING COUNT(1) >=2
order by COUNT(1) desc
现在,当我的工作人员使用该程序时,他们可以选择输入一些自由文本,他们可以输入任何内容,例如“海绵去noob”或“pingu去bob”

然后我做了一个检查,如果找到了关键字1和关键字2,那么做其他事情,否则继续。这是好的,有效的,下面的作品

declare @teststring varchar(512) = '{KEYWORD}' 
select top 1 k.type 
from (values 

('KEYWORD1', '2'), ('KEYWORD2', '2'))

k(word,type) where @teststring like '%' + k.word + '%' 

group by k.type 
HAVING COUNT(1) >=2
order by COUNT(1) desc
这一切都很好,因为它从每一个单词中抽取一个单词,并沿着正确的路线前进。但是如果你把海绵鲍勃放进去,会发生什么?当它试图找到海绵鲍勃和平果诺特时,它会断裂。但我几乎想要3条路线

表示:如果pingu noot存在,则继续,否则如果海绵bob存在,则继续,或者pingu和bob存在,或者如果海绵和noot存在,则继续


只是确认一下:我使用的是第三方软件,无法更新或删除任何表格

我为您编写了一些代码、说明和示例。我还必须添加一些假设-如果我弄错了,可能您必须修改代码:-)

/*关键字1包含两个短语*/
--一个有关键字pingu,另一个有noot,如下所示:它存储在关键字1中
声明@KeyWord1_1 varchar(512)
声明@KeyWord1_2 varchar(512)
SET@KeyWord1_1='pingu'
SET@KeyWord1_2='noot'
/*关键字2包含两个短语*/
--我的另一个字符串有两个关键字,例如:海绵和鲍勃。。。
声明@KeyWord2_1 varchar(512)
声明@KeyWord2_2 varchar(512)
SET@KeyWord2_1='海绵'
SET@KeyWord2_2='bob'
/*您的输入变量*/
--现在,当我的员工使用该程序时,他们可以选择输入一些自由文本,他们可以输入任何内容,例如。。。
声明@teststring varchar(512)
SET@teststring='海绵变为noot或pingu变为bob'
--例子
--SET@teststring='海绵鲍勃'
--SET@teststring='pingu noot'
--SET@teststring='pingu-bob'
--SET@teststring='pingu-bob'
--SET@teststring='noot bob'
声明@done int
设置@done=0——我们将需要它用于进一步的IFs:-)
--您的要求:
--如果pingu noot存在,则继续(=给出关键字的两个短语时)
--,否则,如果存在,则继续(=给定关键字的两个短语时)
--还是pingu和bob继续存在
--或者,如果海绵和noot存在,则继续(同样在给出pingu/海绵和noot/bob时?(如果是*如果否**)
--**否意味着:一个完整的关键字,可以混合使用,但必须适合第一个和第二个短语
--*YES woudl的意思是:必须找到一个完整的关键字,或者从第一个关键字和第二个关键字中找到一个phalse
--在我的例子中,我将继续使用_NO_
IF(@teststring类似“%”++@KeyWord1_1++'%--First关键字-Full
和类似“%”+@KeyWord1_2++“%”的@teststring)
和@done=0
开始
打印“如果pingu noot存在,则继续”
设置@done=1;
结束
IF(@teststring类似“%”++@KeyWord2_1++'%--Second关键字-Full
和类似“%”+@KeyWord2_2+“%”的@teststring)
和@done=0
开始
打印“如果存在海绵bob,则为其他”继续
设置@done=1;
结束
IF(@teststring类似于“%”++@KeyWord1_1++'%--First关键字、First短语和
和@teststring类似“%”++@KeyWord2_2++“%”)——第二个关键字,第二个短语
和@done=0
开始
打印“pingu和bob存在继续”
设置@done=1;
结束
IF(@teststring类似于“%”++@KeyWord2_1++“%”)--第二个关键字、第一个短语和
和@teststring类似“%”++@KeyWord1_2++“%”)——第一个关键字,第二个短语
和@done=0
开始
打印“海绵和noot存在”继续
设置@done=1;
结束
如果@done=0
开始
打印“我还没找到,我在找什么…”
结束
--如果您还想检查订单(防止“noot pingu”工作),您可以尝试以下方法:
SET@teststring='noot pingu'--不工作
SET@teststring='pingu noot'——没关系
设置@done=0
IF(@teststring类似“%”++@KeyWord1_1++'%--First关键字-Full
和类似“%”+@KeyWord1_2++“%”的@teststring)
和@done=0
和CHARINDEX(@KeyWord1_1,@teststring,1)

也认为这是你能让它工作的方式,它不是一个完整的解决方案。 这不是确保安全性并检查数据库是否区分大小写的好方法

问候
tgr

我为您编写了一些代码、解释和示例。我还必须添加一些假设-如果我弄错了,您可能必须修改代码:-)

/*关键字1包含两个短语*/
--一个有关键字pingu,另一个有noot,如下所示:它存储在关键字1中
声明@KeyWord1_1 varchar(512)
声明@KeyWord1_2 varchar(512)
SET@KeyWord1_1='pingu'
SET@KeyWord1_2='noot'
/*关键字2包含两个短语*/
--我的另一个字符串有两个关键字,例如:海绵和鲍勃。。。
声明@KeyWord2_1 varchar(512)
声明@KeyWord2_2 varchar(512)
SET@KeyWord2_1='海绵'
SET@KeyWord2_2='bob'
/*您的输入变量*/
--现在,当我的员工使用该程序时,他们可以选择输入一些自由文本,他们可以输入任何内容,例如。。。
声明@teststring varchar(512)
SET@teststring='海绵变为noot或pingu变为bob'
--例子
--SET@teststring='海绵鲍勃'
--SET@teststring='pingu noot'
--SET@teststring='pingu-bob'
--SET@teststring='pingu-bob'
--SET@teststring='noot bob'
声明@done int
设置@done=0——我们将需要它用于进一步的IFs:-)
--您的要求:
--如果pingu noot存在,则继续(=给出关键字的两个短语时)
--,否则,如果存在,则继续(=给定关键字的两个短语时)
--还是pingu和bob继续存在
--或者如果是海绵