Oracle联接表,其中匹配过程在某些数字后开始

时间:2018-09-26 07:30:03

标签: oracle join match digits

我加入了两个包含单词和值的表。单词的匹配有效。值的匹配不匹配。原因是表“ GATTUNGSDATEN”中的值始终以4个零开头,而表BONDMAPPING中的值则不是。例如。 00001234 =1234。我可以使用什么查询来使匹配过程在4位数字后开始?

select MET_SEC_INDEX_GATTUNGSDATEN.ranl, MET_SEC_INDEX_GATTUNGSDATEN.vvranlwx, 
V_AR_BONDMAPPING.MUREXEXTERNALID

from V_AR_BONDMAPPING

RIGHT JOIN MET_SEC_INDEX_GATTUNGSDATEN

ON V_AR_BONDMAPPING.MUREXEXTERNALID = MET_SEC_INDEX_GATTUNGSDATEN.ranl IN 
('%%%%')

where vvranlwi=34

2 个答案:

答案 0 :(得分:1)

如果始终是四个前导零,则可以使用SUBSTR():

from V_AR_BONDMAPPING
RIGHT JOIN MET_SEC_INDEX_GATTUNGSDATEN
    ON V_AR_BONDMAPPING.MUREXEXTERNALID =  substr(MET_SEC_INDEX_GATTUNGSDATEN.ranl, 5) 

这会修剪MET_SEC_INDEX_GATTUNGSDATEN.ranl中的前四个字符

答案 1 :(得分:1)

如果您知道标识符的长度,则可以用前导零填充较短的标识符

select lpad(1234, 8, '0') from dual
=>
00001234

select lpad('00001234', 8, '0') from dual
=>
00001234

这将隐式将数字转换为VARCHAR2,另一方面,这是在比较期间仍然会发生的情况