首页 > 解决方案 > 在 Postgresql 中比较字符串日期的最有效方法?

问题描述

我们有一个在 AWS(引擎版本 11.8)上运行的 PostgreSQL 数据库。
对于每个项目,我们将日期存储为字符串 [varchar 类型](格式如下 - '2020-12-16')
我们的应用程序需要进行日期范围查询。基于此,在 PostgreSQL 中进行字符串日期比较的最佳和最有效的方法是什么?
我在这里查看了几个关于 SO 的问题,但是没有人谈论这个问题,将日期存储为“varchar”类型或“date”类型是否存在差异。
同样基于上述 2 种存储类型,最有效的查询方式是什么?特别是我们正在寻找范围查询(例如从“2020-12-10”和“2020-12-16”)
非常感谢您的反馈

标签: sqlpostgresqldatedatetimedate-arithmetic

解决方案


没有人谈论将日期存储为“varchar”类型或“date”类型是否有区别的问题。

修复你的数据模型!您应该使用正确的数据类型来存储数据:日期应该存储为date. 使用错误的数据类型是错误的,原因有很多:

  • 每当您需要进行日期运算时,都需要将字符串转换为日期(例如:如何将一个月添加到字符串 '2020-12-16'?);这是非常低效的

  • 在存储您的数据时无法强制执行数据完整性;即使使用检查约束也是不够的。例如:您如何判断'2021-02-29'日期是否有效?

进行查询的最有效方法是什么?特别是,我们正在研究查询范围。

也就是说,您使用的格式可以进行直接的字符串比较。所以对于一个简单的范围比较,我建议字符串操作:

where mystring >= '2020-12-10' and mystring < '2020-12-16'

推荐阅读