Sql 如何匹配另一列中部分包含的列?
我有两个专栏,例如:Sql 如何匹配另一列中部分包含的列?,sql,string,db2,Sql,String,Db2,我有两个专栏,例如: col1 col2 ---- ---- 5qt exception for 5qt ammended 5qt exception for 5076 ammended 6d3 6d3 registered 我希望字符串匹配,以便如果col1的值存在于col2中,则返回col2 所以我得到: exception for 5qt ammended 6d3 registered 我尝试过使用locate(),但运气不太好:
col1 col2
---- ----
5qt exception for 5qt ammended
5qt exception for 5076 ammended
6d3 6d3 registered
我希望字符串匹配,以便如果col1
的值存在于col2
中,则返回col2
所以我得到:
exception for 5qt ammended
6d3 registered
我尝试过使用locate()
,但运气不太好:
select col2 from mytable
where locate(col1,col2) = 1;
我以前做过这样的工作,col2
以col1
的值开始,即
col1 col2
---- ----
5qt 5qt ammended
5qt 5076 ammended
6d3 6d3 registered
但事实似乎是,
col1
的值可以出现在col2
的任何位置,从而使locate()
偏离轨道 你的逻辑是正确的。只需修正比较:
select col2
from mytable
where locate(col1, col2) >= 1;
或者,您也可以使用类似的:
where col2 like '%' || col1 || '%'
Gordon工作的解决方案,您也可以使用:
where position(col1 in col2 ) > 0
或使用:
where replace(col2 ,col1 , '') <> col2
其中替换(col2,col1,”)col2
Hi Gordon谢谢-唯一的问题是col1
的susbtring似乎满足col2
中的搜索条件。必须允许col2
中包含col
整个值的on值。不幸的是,由于权限问题,我无法测试您的第二个建议。@Gordon是对的-因为LOCATE函数返回起始位置-您确定您已按照他的建议将“=”更改为“>=”?显示的“先前有此工作”的结果集与“col2以col1的值开始”相矛盾;i、 e.在最初发布后约2小时内等待任何编辑/更正。FWiW谓词position(col1在col2中)>0
作为已经提供的locate(col1,col2)>=1的有效等价物,对于某些人来说,对于预期效果来说可能更明显。此外,FWiW,如果没有DDL,一些建议可能与实际需求不符,因为对实际DDL做出了错误的假设;e、 RTRIM可以与LIKE谓词一起使用,因为CHAR vs VARCHARIt不是一个结果集,而是我的尝试所处理的MWE