我的PostgreSQL计算不包含小数

时间:2014-03-25 06:07:03

标签: sql decimal

我不太喜欢SQL查询,并且当我需要的东西超过基础知识时依赖谷歌,并且遇到了问题。

我正在尝试计算一个值,它会将结果向下舍入到最接近的整数。

为了测试这一点,我写了以下查询:

select ELAPTIME AS "ELAPSEC", ELAPTIME/60 AS "ELAPMIN" from CMR_RUNINF

结果是:

+-----------+-----------+
|ELAPSEC    |ELAPMIN    |
+-----------+-----------+
|258        |4          |
+-----------+-----------+
|0          |0          |
+-----------+-----------+
|2128       |35         |
+-----------+-----------+
|59         |0          |
+-----------+-----------+

我正在努力做到这一点,但我已经简化了它,以便更容易解释问题。如何确保此计算返回小数点?

3 个答案:

答案 0 :(得分:2)

postgres=# SELECT 258/60::float;
 ?column? 
----------
      4.3
(1 row)

答案 1 :(得分:0)

只需尝试这个

SELECT ELAPTIME AS "ELAPSEC", ELAPTIME/60 :: Float AS "ELAPMIN" 
FROM CMR_RUNINF

或者:

SELECT ELAPTIME AS "ELAPSEC", ELAPTIME/60 :: Real AS "ELAPMIN" 
FROM CMR_RUNINF

<强> Fiddle Demo

答案 2 :(得分:0)

您的SQL产品执行整数除法,因为两个操作数都是整数。 ELAPTIME的整数类型由表结构确定,60自动假定为整数,因为它没有小数点。

有两种方法可以解决问题:

  1. 明确地将操作数转换为非整数数字类型:

    CAST(ELAPTIME AS float) / 60
    
  2. 60.0而不是60,这样解析器就可以看到你没有用整数除整数:

    ELAPTIME / 60.0