MySQL中的round()函数在PostgreSQL中对应的函数是什么
时间: 2024-03-09 10:50:48 浏览: 136
在PostgreSQL中,与MySQL中的round()函数类似的函数是round()函数,不同之处在于它的参数和用法略有不同。
在PostgreSQL中,round()函数的语法如下:
```
ROUND(value [, precision])
```
其中,value是要进行四舍五入操作的数值,precision表示要保留的小数位数(可选参数)。如果省略precision参数,则保留整数部分。
例如,下面是一个将数值保留两位小数的例子:
```
SELECT ROUND(1.2345, 2);
```
输出结果为:
```
round
--------
1.23
```
需要注意的是,round()函数在PostgreSQL中默认使用银行家舍入法,即遵循规则:当某个数值的小数位是5时,如果它前面的数字是偶数,就将其舍去;如果前面的数字是奇数,则将其进位。
相关问题
错误: 函数 round(double precision, integer) 不存在 LINE 6: ROUND( SUM ( COALESCE ( jzmj, 0 ) ) / 10000, 2 ) AS totalar... ^ HINT: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
这个错误提示是因为在PostgreSQL中,round()函数的参数与MySQL中的round()函数略有不同。在PostgreSQL中,round()函数的第一个参数是数值类型,第二个参数是整数类型,表示要保留的小数位数。因此,在您的语句中,需要将第二个参数2改为整数类型,即2::integer。修改后的语句如下所示:
```
SELECT LEFT(jdxz, 9) AS street,
LEFT(jdxz, 6) AS qx,
'swqc' AS TYPE,
COUNT(*) AS totalnum,
ROUND(SUM(COALESCE(jzmj, 0))/10000, 2)::numeric AS totalarea,
NOW() AS updatedate
FROM swqc_house_base_info
WHERE jdxz IS NOT NULL
AND deletemark = '0'
AND (yhwt = '1' OR wfjs = '1' OR wfwgsp = '1')
GROUP BY jdxz;
```
在这个修改后的语句中,将ROUND函数中的第二个参数2改为了2::integer,同时使用了::numeric类型转换,将结果转换为numeric类型,以保证计算结果的精度和类型。
将下面的mysql语句改写为PostgreSQL语句:SELECT LEFT ( jdxz, 9 ) AS street, LEFT ( jdxz, 6 ) AS qx, 'swqc' AS type, COUNT( * ) AS totalnum, ROUND( SUM( IFNULL( jzmj, 0 ) )/ 10000, 2 ) AS totalarea, NOW() AS updatedate FROM swqc_house_base_info WHERE jdxz IS NOT NULL AND deletemark = '0' AND ( yhwt = '1' OR wfjs = '1' OR wfwgsp = '1' ) GROUP BY jdxz
以下是将该MySQL语句改写为PostgreSQL语句后的结果:
SELECT
LEFT(jdxz, 9) AS street,
LEFT(jdxz, 6) AS qx,
'swqc' AS type,
COUNT(*) AS totalnum,
ROUND(SUM(COALESCE(jzmj, 0))/10000, 2) AS totalarea,
NOW() AS updatedate
FROM
swqc_house_base_info
WHERE
jdxz IS NOT NULL
AND deletemark = '0'
AND (yhwt = '1' OR wfjs = '1' OR wfwgsp = '1')
GROUP BY
jdxz;
需要注意的是,在PostgreSQL中,COALESCE函数被用来代替MySQL中的IFNULL函数。同时,PostgreSQL中使用的当前日期函数为NOW(),而不是MySQL中的CURRENT_DATE()。
阅读全文