我有一个问题
我想连接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')
其中仅使用单个字符作为第二参数就足够了。
演示