繁体   English   中英

比较Oracle SQL Developer中不同长度的VARCHAR2

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM