我有两个表tmpModels和tmp_product。需要在tmpModel中找到基于模型的匹配模型。
例如,如果tmpmodel.updatedmodel ='amb3771'
和tmp_product.updatedmodel
可能是'amb3771bian' or '123abc3771xv'
,那么我们就匹配了。
这意味着tmp_product.updatedmodel应该在updatedmodel列的任何位置包含来自tmpmodel的匹配模式。
我实际上已创建了一个存储过程,但这里有一个片段,用于检查一个特定值的行为。
declare @model1 nvarchar(255)
set @model1 = 'amb3771'
select g.updatedmodel as GFK,p.updatedmodel Product from dbo.tmpModels g
join dbo.tmp_product p
on g.updatedmodel= substring(p.updatedmodel,PATINDEX('%@model1%',p.updatedmodel),LEN(@model1))
select @model1
我希望结果中只显示两行。我不明白为什么为@model1
分配了不同的值,即使我强迫它为'amb3771'而奇怪的是没有结果匹配'amb3771'!!请帮助我理解为什么这个逻辑不起作用并给出所需的结果。以下是结果 -
GFK Product
w679 w679
t754cw t754cw
wa5714 wa5714silber
fl2823 fl2823
dc7230 dc7230
wda100 wda100
wa74sd wa74sd
ev9547 ev9547
wa5714 wa5714weiss
wa7439 wa7439
wda210 wda210wpm
wda210 wda210wpm
w194 w194
wda110 wda110wcs
wa5714 wa5714silber
wda100 wda100
答案 0 :(得分:1)
首先,DLeh提到@model
不应该在引号中。
我不明白为什么要为@ model1分配不同的值 即使我强迫它
没有为@model
如果执行下面的查询,您可以看到PATINDEX返回0,然后substring从第0个索引到其长度获得p.UpdateModel的完整值
select g.updatedmodel as GFK,p.updatedmodel Product, PATINDEX(@model1,p.updatedmodel)
from dbo.tmpModels g
join dbo.tmp_product p
on g.updatedmodel= substring(p.updatedmodel,PATINDEX(@model1,p.updatedmodel),LEN(@model1))
我建议的一个解决方案是使用WHERE
条件而不是JOIN
set @model1 = '%wa5714%'
select DISTINCT g.updatedmodel as GFK,p.updatedmodel Product
from dbo.tmpModels g
, dbo.tmp_product p
WHERE PATINDEX(@model1,p.updatedmodel) > 0
AND PATINDEX(@model1,g.updatedmodel) > 0
我假设你的模型应该显示tmpModel和tmp_Product的值。
如果您有不同的要求,请提供更多详细信息/示例