【发布时间】:2019-08-23 14:24:08
【问题描述】:
我正在尝试使用项目代码和这样的客户代码在表中查找最大项目代码
SELECT DISTINCT Max(to_number(translate(substr(proj_code,7),'0123456789','0123456789')))
FROM
proj_ca
WHERE
proj_code LIKE 'CUST43_%'
AND cust_code = 'CUST';
此代码应该返回 97 当我运行此代码时,我得到 ORA-01722 无效数字,但是当我执行 42 或 44 时,它返回正确的数字。我不确定为什么“to_number”会引发错误。
我已将范围缩小到“to_number”部分。如果我删除它,它会返回 97 而没有任何问题。
【问题讨论】:
-
您是否有 CUST4397 行,代码为 CUST 和其他内容;但是您可以成功获得的其他人只有有 CUST?或者其他以
CUST4397开头但在它之前排序的东西——即没有最大值你会看到什么? -
translate应该做什么?你写它的方式,它绝对没有任何作用。我想你认为它做了一些事情,也许这就是问题(或一个问题,无论如何)。 -
您使用的是哪个版本的 Oracle?我问是因为在 12.2 中,
to_numberhas been extended 所以它可以更好地处理转换错误。 -
@AlexPoole 所有项目代码后面都有数字。所以所有的行都包含 CUSTXXXX。如果没有 max,它会返回所有包含 CUST43XX 的行。
-
@mathguy 我没有写代码。你能解释为什么它什么都不做吗?