我在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')
任何建议将不胜感激。感谢。
答案 0 :(得分:0)
从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);
答案 1 :(得分:0)
TO_NUMBER
函数返回一个数值,因此,如注释中所述,您不应将其与字符串值进行比较。
答案 2 :(得分:0)
我通过在子查询中包含外部where
子句来解决问题,然后我得到了所需的结果而没有任何错误。