PostgreSQL 中的 YYYY-MM 列类型

Posted

技术标签:

【中文标题】PostgreSQL 中的 YYYY-MM 列类型【英文标题】:YYYY-MM column type in PostgreSQL 【发布时间】:2017-04-27 12:13:43 【问题描述】:

我需要一个与月份和表中的用户关联的值。我想对它执行查询。不知道有没有针对这种需求的列数据类型。如果没有,我应该:

创建字符串字段并构建年月连接 (2017-01) 创建一个 int 字段并构建年月连接 (201701) 创建两列(一年和一个月) 在月初(2017-01-01 00:00:00)创建日期列 还有别的吗?

目标是运行类似(伪 SQL)的查询:

SELECT val FROM t WHERE year_month = THIS_YEAR_MONTH and user_id='adc1-23...';

【问题讨论】:

使用日期列,并添加一个 date_resolution 列,表示该日期的分辨率。然后据此计算你的日期。 【参考方案1】:

我建议不要太认真地考虑这个问题,而只是使用当月的第一个日期/时间。 Postgres 有很多特定于日期的函数——从 date_trunc()age()+ interval——来支持日期。

您可以轻松地将它们转换为您想要的格式,获取两个值之间的差异,等等。

如果您将查询表述为:

where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'

然后它可以轻松利用(user_id, year_month)(year_month, user_id) 上的索引。

【讨论】:

【参考方案2】:

如果您对以 YYYY-MM 格式显示值感兴趣,可以使用 to_char(your_datatime_colum,'YYYY-MM')

示例:

SELECT to_char(now(),'YYYY-MM') as year_month

【讨论】:

以上是关于PostgreSQL 中的 YYYY-MM 列类型的主要内容,如果未能解决你的问题,请参考以下文章

对PostgreSQL中数组类型列中的每个元素应用除法

将不同格式列的String数据类型的日期转换为PostgreSQL中的日期数据类型

如何将新项目附加到 PostgreSQL 中的数组类型列中

检查 json 类型列 PostgreSQL 中是不是存在字段

使用 PostgreSQL 更新 Laravel 迁移中的枚举列

使用 Hibernate 注释映射 PostgreSQL 串行类型