PostgreSQL函数返回decimal(12,2)丢失小数点及末尾零问题求助
解决PostgreSQL函数返回decimal丢失小数位的问题
这个问题的核心是:虽然函数声明返回decimal(12,2)类型,但实际输出时,数值的小数位格式被自动省略了。可以通过两种方式解决:
方法一:显式格式化返回字符串
将函数的返回类型改为text,并在查询时用to_char函数强制格式化数值为保留两位小数的格式,确保输出始终包含小数点和末尾零:
create or replace function t.tst() returns table (comm text) language plpgsql as $$ begin return query select to_char(t.comm, 'FM9999999999.00') from pay.test t; end; $$
FM修饰符用于去除格式化后可能出现的前导空格,9999999999.00对应decimal(12,2)的位数,确保整数部分最多10位,小数部分固定两位。
方法二:强制保留数值类型的精度
如果需要返回数值类型而非字符串,可以在查询时显式转换为decimal(12,2),确保返回值的精度被严格保留:
create or replace function t.tst() returns table (comm decimal(12,2)) language plpgsql as $$ begin return query select t.comm::decimal(12,2) from pay.test t; end; $$
这种方式下,数值的精度在数据库层面是完整的,若仍出现格式问题,可能是客户端工具的显示设置(比如某些工具会自动省略末尾的零),此时可以调整客户端的数值显示格式,或者改用方法一直接返回格式化后的字符串。
内容的提问来源于stack exchange,提问作者e1s
相关产品推荐
相关产品推荐

