Oracle 连接表,其中匹配过程在某些数字后开始
Oracle joining tables where the matching process starts after certain digits
我加入了两个包含单词和值的 table。单词的匹配有效。值的匹配没有。原因是 table "GATTUNGSDATEN" 中的值总是以 4 个零开头,而 table BONDAPPING 中的值则不是。例如。 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,另一方面,在比较过程中无论如何都会发生这种情况
我加入了两个包含单词和值的 table。单词的匹配有效。值的匹配没有。原因是 table "GATTUNGSDATEN" 中的值总是以 4 个零开头,而 table BONDAPPING 中的值则不是。例如。 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,另一方面,在比较过程中无论如何都会发生这种情况