我正在尝试通过发票号连接两个表中的数据,
LOC NOT NULL VARCHAR2(40)
INV_ORG NUMBER
就像这样,它工作正常:
SELECT oh.inv_org,e.loc
FROM headers oh, sites e
WHERE
AND e.location = TO_CHAR(oh.inv_org);
但是当我尝试将char转换为数字时,我得到了 ORA-01722:无效号码
SELECT oh.inv_org, e.loc
FROM headers oh, sites e
WHERE
AND to_number(e.loc) = oh.inv_org;
错误报告
ORA-01722:无效的数字
我不知道为什么,因为在选择时,转换也可以正常工作
INV_ORG 110992
LOC 110992
OH.INV_ORG-TO_NUMBER(E.LOC) 0
答案 0 :(得分:2)
检查您的数据,可能e.loc
中的值无法转换为数字。
顺便说一句,下面的选择给出了ORA-01722:
SELECT to_number('test') FROM dual
答案 1 :(得分:2)
如果这不起作用:
SELECT oh.inv_org, e.loc
FROM headers oh, sites e
WHERE
AND to_number(e.loc) = oh.inv_org;
表示有e.loc
个值不能转换为数字(例如字母)。因此,您应该使用可行的查询(因为将oh.inv_org
转换为字符串没有问题)
SELECT oh.inv_org,e.loc
FROM headers oh, sites e
WHERE
AND e.location = TO_CHAR(oh.inv_org);
但是,整个故事意味着当前数据模型的设置不正确。您要加入可能的列需要用于某种外键约束,即
如果是这种情况,那么您现在就不会有问题。
P.S。哦,是的-并且,尝试切换到ANSI连接。无法解决您当前的问题,但将来会有所回报。
SELECT oh.inv_org,e.loc
FROM headers oh join sites e on e.location = to_char(oh.inv_org);
答案 2 :(得分:0)
尝试一下:to_number函数需要2个参数
SELECT oh.inv_org, e.loc
FROM headers oh, sites e
WHERE
to_number(e.loc,'9999999') = oh.inv_org;