postgresql - 在 PostgreSQL 中,是否可以为实际列设置默认格式?
问题描述
在 PostgreSQL 中,我有一列以米为单位的人的身高。如果高度为 1.75 m,则显示正确,但如果高度为 1.70 m,则显示为 1.7。我希望已经将其格式化为两位小数,显示为 1.70而无需在每个 SQL 调用中进行格式化。我可以在表创建中指定这个吗?还是存储过程,还是什么?我见过一些关于时间戳的事情,但不是针对真实领域的。知道如何将小数点格式化为冒号 (1,70) 将是一个加号。
解决方案
基本上,演示和“装饰”是应用程序的工作,而不是数据库。
为浮点数设置默认小数位数也会产生问题,因为数据库返回的数据不是列中的实际数据。因此,如果您执行 SELECT 并返回值 1.75,那么如果您搜索此值,您可能找不到它,因为存储的实际值不是 1.75 而是 1.7499999999,它只是为了显示而四舍五入。
潜在的解决方案:
如果要存储指定的位数,请使用 NUMERIC。这将解决上面的 1.7499999999 问题。如果您使用 NUMERIC,则在执行 SELECT 时您将获得该列的实际内容。
在您的应用程序中,如果您使用 ORM,请为具有适当设置的列使用小数(或类似)类型,以便它以您想要的方式显示。
或者使用应用于列的格式创建一个视图,但在这种情况下,如果您想要尾随零,则类型将是文本而不是浮点数,并且除非您在其上创建额外的索引,否则它将无法搜索。
生成的列,其数字格式为您想要的,可能比视图更容易
推荐阅读
- distributed-computing - FLP 不可能中的异步通信包括什么?
- amazon-cloudfront - Lambda@Edge 仅对某些图像提供 502
- mount - 网络驱动器安装错误
- javascript - 使用 php 抓取主要内容
- html - 如何在同一个 div 中获得不同的文本对齐方式?
- apache-spark-sql - 我想找到将 100 列与数据框进行比较的最大值
- git - Gitlab 新笔记本电脑
- python - 如何从python中的csv读取日期和时间?
- django - Django:在多对多关系中查找所有值,其中相关集合的所有元素都符合特定条件
- websocket - 如何使用 websocket 实现 SignalR