将前两个字符替换为三个字符的SQL Oracle



我有一个问题

我想连接custID列上的两个表(表1和表2(。

然而,为了使联接工作,我需要通过删除前两个字符("CC"(并将其替换为0来编辑Table1s custID列,以便将最终输出填充为8位数字。

因此,如果表1中的custID值为CC34054,则需要将其转换为00034054,以便联接在表2中识别该值。例如,如果表2中的custID值为CC3356,则需要修改该值为00003356,以便联接匹配。

我在下面做了一些表格,以便说明我的意思。

表1

CustID
CC34054
CC3356
CC87901

一个选项是用空字符串替换CC,并应用LPAD函数用零填充最多8个字符;可以在JOIN中执行,也可以通过更新table1来执行(因此联接看起来更简单,只有on a.custid = b.custid(。

样本数据:

SQL> with
2  table1 (custid, name) as
3    (select 'CC34054', 'Little' from dual union all
4     select 'CC3356' , 'Scott'  from dual
5    ),
6  table2 (custid, surname) as
7    (select '00034054', 'Foot'  from dual union all
8     select '00003356', 'Tiger' from dual
9    )

查询:

10  select b.custid, a.name, b.surname
11  from table1 a join table2 b on
12    lpad(replace(a.custid, 'CC', ''), 8, '0') = b.custid;
CUSTID   NAME   SURNAME
-------- ------ ----------
00034054 Little Foot
00003356 Scott  Tiger
SQL>

另一种方法是使用SubStr((函数删除前两个字符(它们要么是"CC",要么是其他任何字符(,然后用"0"个字符将Lpad长度改为8:

Select b.CUSTID
From tbl_1 a 
Inner Join tbl_2 b on (Lpad(SubStr(a.CUSTID, 3), 8, '0') = b.CUSTID)

问候。。。

如果整个表中的数据模型(如(都是固定的,我认为不需要替换或填充前导字符,而是对两个CustID列进行修剪

SELECT *
FROM Table1 t1
JOIN Table2 t2
ON LTRIM(t1.CustID,'C') = LTRIM(t2.CustID,'0') 

其中仅使用单个字符作为第二参数就足够了。

演示

最新更新