我不太喜欢SQL查询,并且当我需要的东西超过基础知识时依赖谷歌,并且遇到了问题。
我正在尝试计算一个值,它会将结果向下舍入到最接近的整数。
为了测试这一点,我写了以下查询:
select ELAPTIME AS "ELAPSEC", ELAPTIME/60 AS "ELAPMIN" from CMR_RUNINF
结果是:
+-----------+-----------+
|ELAPSEC |ELAPMIN |
+-----------+-----------+
|258 |4 |
+-----------+-----------+
|0 |0 |
+-----------+-----------+
|2128 |35 |
+-----------+-----------+
|59 |0 |
+-----------+-----------+
我正在努力做到这一点,但我已经简化了它,以便更容易解释问题。如何确保此计算返回小数点?
答案 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
自动假定为整数,因为它没有小数点。
有两种方法可以解决问题:
明确地将操作数转换为非整数数字类型:
CAST(ELAPTIME AS float) / 60
写60.0
而不是60
,这样解析器就可以看到你没有用整数除整数:
ELAPTIME / 60.0