格式化查询从数据库返回的实际值

时间:2013-04-12 10:14:03

标签: sql database postgresql-9.1

我正在使用postgresql。我的数据库中的表具有类型为REAL的列。当postgresql的真值超过7时,将其存储为例如1e + 007.当它被查询检索时,返回值也作为1e + 007.但我需要的值为10000000。解决方案是什么

3 个答案:

答案 0 :(得分:0)

使用SQL CAST。在DB2中为我工作

select cast(cast(1e+007 as real) as decimal (15,2)) from sysibm.sysdummy1;
10000000.00

您可以根据所需的值设置小数位(15,0)。

答案 1 :(得分:0)

select to_char(1e+007::real, '9999999999')

手册中的更多详细信息:http://www.postgresql.org/docs/current/static/functions-formatting.html

答案 2 :(得分:0)

如果你将浮点数用于他们不适合的事情,你会遇到更多的问题,包括你关心数字的确切表示的几乎任何事情。

我建议您使用NUMERIC,一种基数为10(十进制)的数字数据类型,可让您控制精度和比例。见Numeric typesNUMERIC 以较慢的速度执行计算并消耗更多存储空间,因此它并不总是正确的答案,但它适用于众多应用程序。

可以使用浮点数,它更难,因为你无法安全地比较完全相等,必须使用舍入和格式化功能进行显示等。

示例:

regress=> select '1.2'::float8 - '1.0'::float8;
       ?column?       
----------------------
 0.199999999999999956
(1 row)

regress=> select '1.2'::numeric - '1.0'::numeric;
 ?column? 
----------
      0.2
(1 row)

这类问题的另一个常见解决方案是使用应用程序定义的定点表示。如果您需要(比方说)2个小数位,您只需将数字2000.11作为200011存储在数据库中,再乘以100.这是金融应用程序中的常用技术,尽管现在更常见的是使用正确的十进制数据类型。