我知道NaN代表Not a Number。但是,我很难理解Oracle何时以及为何将其添加到行中。
是当它遇到小于0的值(如负数)时,还是在其为垃圾值时?
从文件:
Oracle数据库数字数据类型存储正,负定点和浮点数,零,无穷大以及作为操作未定义结果的值-“非数字”或NAN。
NAN
据我所知,您只能在binary_float或binary_double列中获得NaN 。这些数据类型有自己的文字楠太,并有一个is nan条件对他们来说,和nanvl()功能来操纵它们。
is nan
nanvl()
获取此类值的一种方法示例是将零浮点数/双精度值除以零:
select 0f/0 from dual; 0F/0 ---- NaN
…因此,如果您看到NaN,则您的应用程序逻辑或基础数据可能已损坏。(请注意,您无法使用“普通”数字类型获得此值;ORA-01476: divisor is equal to zero除非分子为浮点数或双精度数,否则您将获得此值)。
ORA-01476: divisor is equal to zero
但是,您不会获得零或负数的NaN。也可能有一个字符串列,并且应用程序将单词“ NaN”放入其中,但是在许多级别上将数字存储为字符串是个坏主意,因此希望不是这样。