关于存储过程:在oracle的表的第三列中仅显示两列的不匹配值

Show only unmatched values of two columns in third column of table in an oracle

我想创建一个stored procedure,要检查以下情况。

IMG1

在以上两列中,第一行的RJ_SAPIDRJ_COLO_SAPID中,值I-GJ-JMLU-ENB-6011是通用的。

因此,除了该值外,我想使用存储过程在第三栏中显示其他两个值。

我尝试使用REPLACE函数,但未成功。下面是代码

1
SELECT REPLACE(RJ_SAPID, RJ_COLO_SAPID, '') FROM NE_STRUCTURES;

请建议如何进行。

表定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OBJECTID                       NUMBER        
RJ_SAPID                       VARCHAR2(20)  
RJ_COLO_SAPID                  VARCHAR2(200)
RJ_NETWORK_ENTITY_ID           VARCHAR2(30)  
STRUCTURE_NAME                 VARCHAR2(200)
INVENTORY_STATUS_CODE          VARCHAR2(4)  
RJ_MAINTENANCE_ZONE_CODE       VARCHAR2(20)  
RJ_SITE_NAME                   VARCHAR2(200)
RJ_SITE_ADDRESS                VARCHAR2(500)
RJ_STRUCTURE_TYPE              VARCHAR2(20)  
TYPE_NAME                      VARCHAR2(20)  
RJ_LAST_MODIFIED_BY            VARCHAR2(50)  
RJ_LAST_MODIFIED_DATE          DATE          
RJ_STATUS                      VARCHAR2(200)
RJ_CITY_CODE                   VARCHAR2(10)  
RJ_R4G_STATE_CODE              VARCHAR2(10)  
RJ_DISTRICT_CODE               VARCHAR2(20)  
RJ_TALUK_CODE                  VARCHAR2(20)  
RJ_JC_CODE                     VARCHAR2(20)  
RJ_JIOPOINT_SAPCODE            VARCHAR2(20)  
RJ_COMPANY_CODE_1              VARCHAR2(20)  
RJ_COMPANY_CODE_2              VARCHAR2(20)  
NE_STATUS                      VARCHAR2(20)


您可以使用REPLACE(RJ_COLO_SAPID, RJ_SAPID, ''),对于前导逗号,请使用LTRIM

1
2
3
SELECT RJ_SAPID, RJ_COLO_SAPID,
       REPLACE(RTRIM(LTRIM(REPLACE(RJ_COLO_SAPID, RJ_SAPID, ''), ','), ','), ',,', '') AS ThirdColumn
FROM NE_STRUCTURES


只需更改您的论点,您就可以了:

1
SELECT REPLACE(RJ_COLO_SAPID, RJ_SAPID, '') FROM NE_STRUCTURES

如果要去除不需要的逗号,请使用:

1
SELECT REGEXP_REPLACE(REPLACE(RJ_COLO_SAPID, RJ_SAPID, ''),'^,+|,+$|(,),+','\\1') FROM NE_STRUCTURES