Oracle 联接表,其中匹配过程在特定数字之后开始



我连接了两个包含单词和值的表。单词的匹配有效。值的匹配不会。原因是表"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

如果它总是四个前导零,你可以使用 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中修剪前四个字符

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

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

然而,这将隐式地将数字转换为 VARCHAR2,另一方面,这是在比较过程中无论如何都会发生的事情

最新更新