【发布时间】:2013-12-21 15:15:14
【问题描述】:
我有一个包含一组范围(RangeA 和 RangeB)的 Oracle 表。这些列是 varchar,因为它们可以保存数字和字母数字值,如下例所示:
ID|RangeA|RangeB
1 | 10 | 20
2 | 21 | 30
3 | AB50 | AB70
4 | AB80 | AB90
我需要执行一个只返回具有数值的记录的查询,并对该查询执行计数。到目前为止,我已经尝试使用两个不同的查询来执行此操作,但没有任何运气:
查询 1:
SELECT COUNT(*) FROM (
SELECT RangeA, RangeB FROM table R
WHERE upper(R.RangeA) = lower(R.RangeA)
) A
WHERE TO_NUMBER(A.RangeA) <= 10
查询 2:
WITH A(RangeA,RangeB) AS(
SELECT RangeA, RangeB FROM table
WHERE upper(RangeA) = lower(RangeA)
)
SELECT COUNT(*) FROM A WHERE TO_NUMBER(A.RangeA) <= 10
子查询工作正常,因为我得到的两条记录只有数值,但查询的 COUNT 部分失败。我应该只得到 1,但我得到了以下错误:
ORA-01722: invalid number
01722. 00000 - "invalid number"
我做错了什么?非常感谢任何帮助。
【问题讨论】: