[英]Comparing different length VARCHAR2 in Oracle SQL Developer
我添加了一个新表,用于通过新系统处理付款。 问题是它只包含一些信息,所以我需要将它与另一个表匹配以获取完整信息。 基本上,可以匹配事务的列在旧表中的类型为varchar2(20),但在新表中是varchar2(80)。
新表(我们称之为Z)可以容纳从11位数字引用到30-40字符引用的任何内容(可以是数字/字母/某些特殊字符)。 我想要实现的是将它与旧表(我们称之为X)相匹配,它只包含11位数的参考数字。
那么,让我们说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行,但是没有返回任何行。
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代码的首选方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.