如何从created_at列中仅提取年份

时间:2016-09-07 16:05:29

标签: ruby-on-rails postgresql datetime

在数据库中查询created_at值会得到以下输出:

>> kevin.created_at
=> Sun, 21 Aug 2016 07:46:26 UTC +00:00

如何从此信息中仅提取年份?
我试图将kevin.created_at视为一个字符串,看看我是否能得到我想要的东西:

>> kevin.created_at.split[3].to_i

但是我收到了这条消息:

NoMethodError: undefined method `split' for Sun, 21 Aug 2016 07:46:26 UTC +00:00:Time

因此我尝试了:

>> kevin.created_at.to_a
=> [26, 46, 7, 21, 8, 2016, 0, 234, false, "UTC"]

所以我可以找到一个解决方案:

>> kevin.created_at.to_a[5]
=> 2016

有没有更好或更优雅的解决方案来查询Postgresql获取此信息?

3 个答案:

答案 0 :(得分:13)

您可以使用ruby Time类中的.year函数:

kevin.created_at.year

答案 1 :(得分:5)

在Postgres中,EXTRACT功能可以让您从日期开始只需一年:

# SELECT EXTRACT('year' FROM created_at) as year FROM USERS LIMIT 1;
 year
------
 2016
(1 row)

在Ruby中,如果您已经掌握了记录,可以使用Time#year方法:

user.created_at.year  # => 2016

答案 2 :(得分:2)

或者,您可以使用date_part功能

SELECT DATE_PART('year' , created_at) AS year FROM USERS

请参阅datetime function in postgresql

希望它有所帮助。