PostgreSQL中bytea文件大小转decimal(16,2)保留两位小数
PostgreSQL中Bytea文件大小转换为Decimal(16,2)格式方案
嘿,我来帮你搞定这个格式转换的问题!针对你需要将计算出的文件大小(MB)保留两位小数并转换为decimal(16,2)格式的需求,PostgreSQL有几种简洁的实现方式,比MS SQL的写法更直接:
核心解决方案
方式1:使用ROUND() + CAST()实现类型转换
这是最直接的写法,先通过ROUND()将结果四舍五入到两位小数,再强制转换为指定的decimal类型:
SELECT CAST(ROUND(length('0x546573742044617461') / 1048576.0, 2) AS DECIMAL(16,2));
执行后你的示例值0.000019073486328125会被转换为0.00,如果是1.446119则会得到1.45,完全符合你的四舍五入需求。
方式2:使用TO_CHAR()格式化输出(如需字符串形式)
如果你需要像MS SQL那样转换为字符串类型,PostgreSQL的TO_CHAR()函数可以更灵活地控制格式:
SELECT TO_CHAR(ROUND(length('0x546573742044617461') / 1048576.0, 2), 'FM99999999999999.99');
这里的FM修饰符会去掉结果中多余的前导空格,确保输出格式干净利落。
重要提醒:Bytea字段的正确字节数获取
注意:如果你的实际场景是查询bytea类型字段的文件大小,不要用length()函数(它计算的是字符长度),应该用octet_length()来获取真实的字节数,比如:
SELECT CAST(ROUND(octet_length(your_bytea_column) / 1048576.0, 2) AS DECIMAL(16,2)) FROM your_table;
这样才能得到准确的文件大小计算结果。
内容的提问来源于stack exchange,提问作者Jagadeesh
相关产品推荐
相关产品推荐

