我需要测试PostgreSQL中的数值/浮点值是否不是数字(NaN).请注意"PostgreSQL将NaN值视为相等",因此这个C++技巧不起作用.因为我isnan在PostgreSQL 9.3中没有看到任何功能,所以这是我最好的尝试:
create or replace function isnan(double precision) returns boolean as
$$select $1::text = 'NaN'::text$$ language sql;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来测试NaN?
Cra*_*ger 13
有没有更好的方法来测试NaNs?
只需比较平等:
SELECT double precision 'NaN' = double precision 'NaN';
Run Code Online (Sandbox Code Playgroud)
因为,根据您链接的文档,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'
$$;
Run Code Online (Sandbox Code Playgroud)
任何带减号的 NaN 值仍然是 NaN 值(就像零),所以你可以试试这个:
create or replace function isnan(double precision) returns boolean as $$
select $1 = -$1 and $1 != 0.0 $$ language sql;
Run Code Online (Sandbox Code Playgroud)
或者:
create or replace function isnan(double precision) returns boolean as $$
select $1 = -$1 and $1 = $1 + 1.0 $$ language sql;
Run Code Online (Sandbox Code Playgroud)
就 PostgreSQL 处理的 NaN 值大于所有非 NaN 值而言,以下技巧是可能的:
create or replace function isnan(double precision) returns boolean as $$
select $1 > 0 and -$1 > 0 $$ language sql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12810 次 |
| 最近记录: |