Запрос к базе данных для значения 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?

2
Asarluhi 7 Сен 2016 в 19:05

3 ответа

Лучший ответ

Вы можете использовать функцию .year из класса ruby ​​Time как:

kevin.created_at.year
15
Sandesh Jain 7 Сен 2016 в 16:11

В 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
5
Robert Nubel 7 Сен 2016 в 16:10

В качестве альтернативы вы можете использовать функцию date_part

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

Обратитесь к функции datetime в postgresql

Надеюсь, это поможет.

3
Paarth 8 Сен 2016 в 05:57