首页 > 解决方案 > 在 PostgreSQL 中,是否可以为实际列设置默认格式?

问题描述

在 PostgreSQL 中,我有一列以米为单位的人的身高。如果高度为 1.75 m,则显示正确,但如果高度为 1.70 m,则显示为 1.7。我希望已经将其格式化为两位小数,显示为 1.70而无需在每个 SQL 调用中进行格式化。我可以在表创建中指定这个吗?还是存储过程,还是什么?我见过一些关于时间戳的事情,但不是针对真实领域的。知道如何将小数点格式化为冒号 (1,70) 将是一个加号。

标签: postgresqlfloating-pointformatting

解决方案


基本上,演示和“装饰”是应用程序的工作,而不是数据库。

为浮点数设置默认小数位数也会产生问题,因为数据库返回的数据不是列中的实际数据。因此,如果您执行 SELECT 并返回值 1.75,那么如果您搜索此值,您可能找不到它,因为存储的实际值不是 1.75 而是 1.7499999999,它只是为了显示而四舍五入。

潜在的解决方案:

  • 如果要存储指定的位数,请使用 NUMERIC。这将解决上面的 1.7499999999 问题。如果您使用 NUMERIC,则在执行 SELECT 时您将获得该列的实际内容。

  • 在您的应用程序中,如果您使用 ORM,请为具有适当设置的列使用小数(或类似)类型,以便它以您想要的方式显示。

  • 或者使用应用于列的格式创建一个视图,但在这种情况下,如果您想要尾随零,则类型将是文本而不是浮点数,并且除非您在其上创建额外的索引,否则它将无法搜索。

  • 生成的列,其数字格式为您想要的,可能比视图更容易


推荐阅读