我的PostgreSQL计算不';不包括小数

我的PostgreSQL计算不';不包括小数,sql,decimal,Sql,Decimal,我不太涉足SQL查询,当我需要一些比基础知识更重要的东西并且遇到问题时,我会依赖谷歌 我试图计算一个值,它返回一个四舍五入到最接近的整数的结果 为了测试这一点,我编写了以下查询: select ELAPTIME AS "ELAPSEC", ELAPTIME/60 AS "ELAPMIN" from CMR_RUNINF 结果是: +-----------+-----------+ |ELAPSEC |ELAPMIN | +-----------+-----------+ |258

我不太涉足SQL查询,当我需要一些比基础知识更重要的东西并且遇到问题时,我会依赖谷歌

我试图计算一个值,它返回一个四舍五入到最接近的整数的结果

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

select ELAPTIME AS "ELAPSEC", ELAPTIME/60 AS "ELAPMIN" from CMR_RUNINF
结果是:

+-----------+-----------+
|ELAPSEC    |ELAPMIN    |
+-----------+-----------+
|258        |4          |
+-----------+-----------+
|0          |0          |
+-----------+-----------+
|2128       |35         |
+-----------+-----------+
|59         |0          |
+-----------+-----------+
我试着做更多的事情,但是我已经简化了它,使它更容易解释这个问题。如何确保此计算返回小数点?

请尝试此方法

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


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

解决此问题有两种方法:

  • 将任一操作数显式转换为非整数数字类型:

    CAST(ELAPTIME AS float) / 60
    
  • 编写
    60.0
    而不是
    60
    ,以便解析器可以看到您没有将整数除以整数:

    ELAPTIME / 60.0
    

  • 提供SQL Server的语法,Cast(eloptime as Float)/60。简而言之,在除法之前先转换变量。谢谢。我选择了另一个选项,但知道所有选项很好。干杯
    CAST(ELAPTIME AS float) / 60
    
    ELAPTIME / 60.0