【发布时间】:2018-02-14 14:59:53
【问题描述】:
我在我的 Oracle 客户端中运行下面提到的查询,我得到了
ORA-01722: 无效号码
错误。我知道问题是由于 TAG_VALUE 列的类型为“varchar2”,我将其转换为数字,然后在 where 子句中使用该字段。我曾尝试使用“CAST”功能,但这也无济于事。
如果我使用代码WHERE (P.TAG_VALUE > '100') 忽略最后一个 where 条件运行查询,那么我会得到结果,但包括最后一个 where 子句会给我错误。
SELECT DISTINCT
count(P.CREATED_DATETIME)
FROM
(
select OUTPUT_TAG_ID,TO_NUMBER(TAG_VAL,'9999.99') AS
TAG_VALUE,TAG_VAL_TS,CREATED_DATETIME
from OV80STG.PRCSD_DATA_OUTPUT_ARCHIVE
where MODEL_CODE='MDLADV1538'
AND TAG_VAL <> 'U_Transfer_rate'
) P
WHERE
(P.TAG_VALUE > '100')
任何建议将不胜感激。谢谢。
【问题讨论】:
-
去掉
(P.TAG_VALUE > '100')处的单引号 -
@Arpit 。你能检查查询
SELECT * FROM OV80STG.PRCSD_DATA_OUTPUT_ARCHIVE WHERE REGEXP_LIKE(TAG_VALUE, '[^[:digit:]]')是否返回任何行吗?就是检查列中是否存在非数字字符 -
感谢 Jens 的回复,我已经尝试过这样做,但查询仍然返回相同的错误。
-
@Kaushik,感谢您的回复,是的,提到的查询正在返回行
-
@ArpitArora :表示
TAG_VALUE列中有非数字字符。您必须从所有获取的记录中替换它们。