在数据库中查询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获取此信息?
答案 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
希望它有所帮助。