在Postgres除了MySQL之外用INT划分的结果

时间:2016-01-05 16:15:19

标签: mysql postgresql division

我有问题。如果artikel.preis是2430而umsatz.opreis是2722.

COALESCE(ROUND(artikel.preis/NULLIF(umsatz.opreis,0),0),9999) as kontroll

在MySQL中我得到1作为结果,但在PostgresSQL中我得到0。

为什么会那样? 2430/2722 = 0.8927并应舍入为1.

我怎样才能在Postgres中使用它,然后在MySQL中使用postgres中的其他内容?

1 个答案:

答案 0 :(得分:3)

在PostgreSQL中,/运算符根据其操作数的类型进行除法,如果artikel.preisumsatz.opreis都是整数,则除法将是整数除法:

select 2430/2722

将返回0,而

select 2430::float/2722::float

将返回预期结果。试试这个:

COALESCE(ROUND(artikel.preis::float/NULLIF(umsatz.opreis::float,0),0),9999) as kontroll

但是,要小心umsatz.opreis为空或为零,它将导致除零条件。如果你有圆形问题,这个查询会将结果转换回整数:

COALESCE((artikel.preis::float/umsatz.opreis::float)::int,9999) as kontroll