我需要测试PostgreSQL中的数值/浮点值是否不是数字(NaN)。注意"PostgreSQL treats NaN values as equal",所以this C++ trick doesn't work。由于我在PostgreSQL 9.3中没有看到任何isnan函数,下面是我的最佳尝试:

create or replace function isnan(double precision) returns boolean as
  $$select $1::text = 'NaN'::text$$ language sql;

有没有更好的方法测试NaNs?

最佳答案

有没有更好的方法来测试南斯?
简单比较一下是否平等:

SELECT double precision 'NaN' = double precision 'NaN';

因为,根据您链接到的文档,Pg将NaNs视为相等。我对此感到惊讶,因为它正确地将NULL视为不等于任何其他NULL,并且本应期望NaN=NaN返回NULL,但是。。。好吧,它起作用了。
或者如果你想要一个函数:
create or replace function isnan(double precision)
language sql
immutable
returns boolean as $$
select $1 = double precision 'NaN'
$$;

关于postgresql - 如何检查数字是否为NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25858859/

10-15 21:30