SQL中的动态子字符串

时间:2018-12-06 15:27:46

标签: sql sql-server substring

我正在一个有两个下表的项目:

#temp1:

enter image description here

#temp2:

enter image description here

因此,对于#temp2表上的每个客户端,我必须检查子字符串(outcome,1,12)是否与#temp1表的text1 / text2 / text3 / text4相匹配。如果它们匹配,则串联text1 / text2 / text3 / text4(将#temp1上的匹配子字符串替换为#temp2的结果)。最终输出如下:

#output desired:

enter image description here

因此对于CID 1001,子字符串(#temp2.​​outcome,1,12)= SOP201800205与#temp1.text2 = SOP201800205相匹配。所以我的输出应该是

   Concat(#temp1.text1,#temp2.outcome)

我的试用版演示在这里

https://rextester.com/CAEP69354

有帮助吗?!

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则您实际上是在尝试找出#temp1中的任何值是否完全包含在outcome的{​​{1}}中。尽管有#temp2参数,但我认为您并不在乎字符串的长度,因此我使用了SUBSTRING值的长度来设置#temp1 {{1}的参数}。

如果正确,那么您只需要一个更可靠的#temp2语句。这应该为您工作:

SUBSTRING

上个月:https://rextester.com/BIR87919

答案 1 :(得分:0)

只有一种情况是text1或text2或text3或text4的子字符串
等于t2.CID的结果

select
t1.cid,
substring(t1.text1,1,12),
substring(t1.text2,1,12),
substring(t1.text3,1,12),
substring(t1.text4,1,12),
substring(t2.outcome,1,12) as outcome,
case when substring(t1.text1,1,12) = substring(t2.outcome,1,12) then 'text1 = outcome'
end,
case 
     when substring(t1.text2,1,12) = substring(t2.outcome,1,12) then 'text2 = outcome'

end,
case when substring(t1.text3,1,12) = substring(t2.outcome,1,12) then 'text3 = outcome'
end,
case when substring(t1.text4,1,12) = substring(t2.outcome,1,12) then 'text4 = outcome'
end

from #temp1 t1
join #temp2 t2 on t1.cid = t2.cid

我认为您的子字符串有误 您期望substring(t1.text2,1,12) = substring(t2.outcome,1,12)substring(t1.text2,1,11) = substring(t2.outcome,1,11) 您是否要检查子字符串substring(t1.text,1,12)?