投射以显示合适的结果

Cast to show a suitable result

提问人:Hamed Tamadon 提问时间:8/6/2023 最后编辑:Erwin BrandstetterHamed Tamadon 更新时间:8/7/2023 访问量:38

问:

我有一个查询返回以下值之一:

0.00 ,
0.05 ,
0.10 

但是我想要的结果如下,而不是上面的项目:

0 ,
0.05 ,
0.1

哪种铸造或圆形适合达到此结果?

PostgreSQL 投射

评论

0赞 Mureinik 8/6/2023
不投票关闭,所以我不会错误地重复锤子,但是 IIUC,这应该可以解决您的问题:stackoverflow.com/q/72033248/2422776
1赞 Luuk 8/6/2023
在stackoverflow上工作了一年后,你应该知道如何格式化你的问题......
0赞 Bergi 8/6/2023
请发布您的查询。如果您至少不告诉我们此结果列的类型,则无法回答此问题 - 它是 a 、 a 还是其他类型?textdecimal
0赞 Hamed Tamadon 8/6/2023
感谢您的友好回答。首先我将其转换为 numeric(2,2),然后将总结果转换为浮点数
0赞 Frank Heikens 8/7/2023
为什么要使用浮子?尤其是当您从数字开始时。稍微跑题了,恕我直言,数据的呈现应该在表示层完成,而不是在数据库或应用程序层。

答:

0赞 Erwin Brandstetter 8/7/2023 #1
 to_char(n, 'FM90.99')

to_char() 函数接受任何数字输入(日期时间类型也有重载变体)并根据给定的模板模式返回字符串 (type )。用于代表text

如果您的输入可以溢出,则相应地扩展模式。为:numeric(2,2)numeric(9,6)

 to_char(n, 'FM999999990.999999')

数字输入的模板模式修饰符是这样做的:FM

填充模式(取消尾随零和填充空格)

可悲的是,它错过了一个点:没有有效小数的数字保留了一个悬空的点:“0.”“123”。如果这是不可接受的,请使用以下方法之一:

 rtrim(to_char(n, 'FM90.99'), '.')
 CASE n = 0 THEN '0' ELSE to_char(n, 'FM90.99') END
 to_char(n, 'FM90.99')::numeric
 n::float8
 n::real

小提琴

每种方法都有优点和缺点,对于极端情况,结果可能会略有不同(甚至失败)。最值得注意的是,只有前两名返回......text