6

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

  • 创建字符串字段并构建年月连接 (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...';
4

2 回答 2

9

我建议不要太认真地考虑这个问题,而只是使用当月的第一个日期/时间。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)

于 2017-04-27T12:15:49.593 回答
7

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

例子:

SELECT to_char(now(),'YYYY-MM') as year_month
于 2017-04-27T13:04:54.660 回答