PostgreSQL 除数不能为零,保留两位小数多种方法

  • Post author:
  • Post category:其他




COALESCE 函数



COALESCE 函数语法

COALESCE (argument_1, argument_2, …);

参数可以有无限个,总是返回第一个非空参数,如果所有参数都是null,则返回null。

COALESCE 函数从左到右开始评估每个参数,直到发现第一个非空参数,所有剩余参数被忽略不会被评估。标准SQL中对应的函数为 NVL 和 IFNULL ,mysql 为 ifnull 函数, oracle 为nvl 函数。



示例:

> SELECT COALESCE(1, 2);        -- return 1
> SELECT COALESCE(NULL, 2 , 1); -- return 2



NULLIF 函数语法

NULLIF 函数是PostgreSQL提供的最常用的条件表达式之一,语法如下:

NULLIF(argument_1,argument_2);

如果两个参数相等返回null,否则返回第一个参数



示例:

> SELECT NULLIF (1, 1);     -- return NULL
> SELECT NULLIF (1, 0);     -- return 1
> SELECT NULLIF ('A', 'B'); -- return A



使用nullif函数防止除数为零

我们可以使用nullif函数将被除数置为null,再使用上面提到的coalesce函数实现返回结果



示例:

> SELECT COALESCE(1 / NULLIF(excerpt, 0), num);

首先,如果除数 excerpt 的值是 0,则 nullif 函数返回null,否则它返回 excerpt。

其次,如果 nullif 函数为 null 则 coalesce 函数的第一个参数返回null,从而结果返回 num。



总结

使用 nullif 函数检查 excerpt 值是否为 0,如果为 0 则返回 null,从而整个结果为 null,成功避免了除数为 0。



数学函数

函数 返回类型 描述 例子 结果
random() double 0.0到1.0之间的随机数值 random()
round(double/numeric) 圆整为最接近的整数 round(42.4) 42
round(v numeric, s int) numeric 圆整为s位小数数字 round(42.438,2) 42.44
decimal(a int, b int) a:指的是整数和小数所能存的最多的位数;b:指的是小数数字的位数,即a-b就是整数的位数



示例:



rond 函数
> SELECT round(1, 2);      -- return 1
> SELECT round(1.2, 2);    -- return 1.2
> SELECT round(1.5555, 2); -- return 1.56
> SELECT round(1.4444, 2); -- return 1.44


decimal 函数
> SELECT CAST(1 as decimal(10, 2));       -- return 1.00
> SELECT CAST(1.2 as decimal(10, 2));     -- return 1.20
> SELECT CAST(1.55555 as decimal(10, 2)); -- return 1.56
> SELECT CAST(1.44444 as decimal(10, 2)); -- return 1.44



版权声明:本文为xiaohuihui1400原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。