我需要在Oracle数据库上编写一个查询,其中一个字段被称为ACCOUNT
。ACCOUNT
在保留列表上http://docs.oracle.com/cd/B19306_01/em.102/b40103/app_oracle_reserved_words.htm我的查询失败了。
在这个DB中,ACCOUNT
是VARCHAR2
,我不能更改它的名称或任何东西的结构,我只能运行SELECT
查询。
虽然ACCOUNT
是VARCHAR2
,但它总是包含一个整数,我想得到一个值范围。
我以为这会奏效:
SELECT *
FROM TABLE
WHERE TO_NUMBER(ACCOUNT) > 1000
AND TO_NUMBER(ACCOUNT) < 2000
但我刚刚收到一个ORA-01722无效号码错误。
我已经检查过ACCOUNT
只包含整数,并且使用非保留关键字运行此查询效果良好。。。
您可以使用类似的"
双引号来转义保留字
SELECT *
FROM TABLE
WHERE TO_NUMBER("ACCOUNT") > 1000
AND TO_NUMBER("ACCOUNT") < 2000
(OR(更好地使用类似的BETWEEN
结构
SELECT *
FROM TABLE
WHERE TO_NUMBER("ACCOUNT") BETWEEN 1001 AND 1999
如果您的表名真的是TABLE
;你也需要逃避,因为这也是一个保留词。
我调查了您的问题,并能够复制
此错误ORA-01722无效号码错误。发生这种情况是因为您的sql试图转换类似的内容
To_NUMBER('OMETEXT'(>一些数字
因此,当您的sql将其转换为_number(‘somenumber as a varchar2’(时,它会遇到(‘sometext varchar2(
示例
选择*来自表,待定其中TO_NUMBER("helloworld"(>1000
这将抛出那个错误。检查列的数据,在数据的某个地方,一行或多行中有一些文本。
您是否尝试向表添加别名
SELECT *
FROM TABLE as tbl
WHERE TO_NUMBER(tbl.ACCOUNT) > 1000
AND TO_NUMBER(tbl.ACCOUNT) < 2000