PostgreSQL中的YYYY-MM列类型

rap*_*2-h 1 sql postgresql database-design postgresql-9.6

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

  • 创建一个字符串字段并建立年月串联(2017-01)
  • 创建一个int字段并建立年月串联(201701)
  • 创建两列(一年零一个月)
  • 在月初(2017-01-01 00:00:00)创建日期列
  • 还有吗

目的是运行类似(pseudo-SQL)的查询:

SELECT val FROM t WHERE year_month = THIS_YEAR_MONTH and user_id='adc1-23...';
Run Code Online (Sandbox Code Playgroud)

Ste*_*pel 9

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

例子:

SELECT to_char(now(),'YYYY-MM') as year_month
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 5

我建议不要考虑这个问题,而只是使用每月的第一个日期/时间。Postgres具有大量特定于日期的功能-从date_trunc()age()+ interval-支持日期。

您可以轻松地将它们转换为所需的格式,获得两个值之间的差,依此类推。

如果您的查询短语为:

where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
Run Code Online (Sandbox Code Playgroud)

这样就可以轻松利用(user_id, year_month)或上的索引(year_month, user_id)