无效的数字SQL错误

时间:2017-03-14 08:36:03

标签: sql oracle oracle11g

我有这样的陈述。虽然我可以在Oracle 11g中执行此语句并查看结果。但是我的朋友(他也使用Oracle 11g)无法执行此语句。他得到无效的号码错误。我不明白为什么。你可以帮帮我吗?他还尝试将upper_threshold转换为varchar,但它不起作用。

select *
from table
where (lower_threshold <> to_char( 0) or upper_threshold = 0 or upper_threshold is null)

lower_threshold具有varchar类型,上限阈值是整数值。

1 个答案:

答案 0 :(得分:0)

当我们尝试将非数字值转换为数字数据类型时,Oracle会抛出ORA-01722: invalid number

您说“上限阈值是整数值”但似乎table.upper_threshold的数据类型更可能是字符串数据类型(VARCHAR2或类似),如table.lower_threshold。在这种情况下,当您执行这样的过滤器时:

upper_threshold = 0

Oracle实现的是

to_number(upper_threshold) = 0

您没有收到ORA-01722错误,因为表中的所有值都会愉快地转换为数字。你的朋友没那么幸运,他在upper_threshold栏中有非数字值(空格,字母等)。

教学是,始终使用NUMBER列来存储数字。

  

“实际上,我们都连接到同一个数据库,同一个表”

基本上就是,如果两个人使用相同的数据对同一个实际表运行相同的SQL,它们将得到相同的结果。所以你们其中一个人必须做出与众不同的事情。可能这是客户端设置的问题,虽然我想不出可能导致ORA-01722错误的环境参数。更有可能的是,你们中的一个正在运行不同的语句或使用不同的表或(如Mathguy所建议的)运行不同的数据集。