添加了一个新表,我可以在该表中通过新系统处理付款。问题是它仅包含一些信息,因此我需要将其与另一个表进行匹配以获得完整的信息。 基本上,可以将事务匹配在一起的列在旧表中的类型为varchar2(20),但在新表中的类型为varchar2(80)。
新表(称为Z)可以容纳从11位数字引用到30-40个字符引用(可以是数字/字母/某些特殊字符)的任何内容。我要实现的目标是将其与仅包含11位数字的参考号相匹配的旧表(简称X)。
因此,假设Z表看起来像这样:
TransactionType Reference
Purchase abcd-efgh-1923-aa22
Refund 12345678910
表X看起来像:
Purchase Reference
Shoes 12345678910
Jacket 10987654321
实际上,我想查找退款和给定的参考信息,即购买的商品。
我对SQL还是很陌生,我一直在尝试查看强制转换/转换的功能,但是在尝试强制转换和转换时,我有点迷失了。
我尝试过:
select purchase from x, z
where x.reference=z.reference;
select purchase from x,z
where to_number(x.reference)=to_number(z.reference);
select purchase from x,z
where x.reference=cast(z.reference as varchar2(20)); --- and viceversa, casting x to varchar2(80)
没有输出,尽管当我检查一天退款然后在同一天购买时,会有一些匹配的参考。假设我们有一天会返回5行,但不会返回任何行。
答案 0 :(得分:0)
TO_CHAR
函数应该在这里为您提供覆盖:
SELECT x.Purchase, x.Reference
FROM X x
INNER JOIN Z z
ON TO_CHAR(x.Reference) = TO_CHAR(z.Reference)
WHERE z.TransactionType = 'Refund';
如果您想限制使用某个参考,则只需在WHERE
子句中包含该要求即可。
请注意,我重构了您的联接以使用现代的显式内部联接。这是编写SQL代码的首选方式。