PostgreSQL - конвертировать год в дату - PullRequest
7 голосов
/ 28 декабря 2011

год задается как int : 2009, 2010 и т. Д.
Я хочу преобразовать эту информацию в ДАТА (первое января).

Мои решения (я предпочитаю первое):

(year::char || '-01-01')::DATE
'0001-01-01' + ((year-1)::char || ' year')::interval

Есть ли лучшее (встроенное) или более элегантное и быстрое решение?
(IВ настоящее время я работаю с PostgreSQL 8.4 , но также заинтересован в более свежих версиях.)

Ответы [ 4 ]

10 голосов
/ 28 декабря 2011

Я думаю, что это самый простой способ:

to_date(year::varchar, 'yyyy')
4 голосов
/ 29 декабря 2011
SELECT to_date(2011::text, 'YYYY');

Внимание: любой код, основанный на преобразовании текста из даты в текст, является некорректным.Кто-нибудь может изменить формат по умолчанию datestyle на какое-то неожиданное значение, и этот код завершится ошибкой.Использование to_date или to_timestamp очень предпочтительно. to_date или to_timestamp относительно дорого, но надежно.

1 голос
/ 28 декабря 2011

Одна возможность:

select year * '1 year'::interval + '0000-01-01'::date;

Мне нравится этот способ, потому что он избегает преобразования между текстом и целым числом (как только все константы проанализированы).

1 голос
/ 28 декабря 2011
to_date('01 Jan ' || year, 'DD Mon YYYY')

ИЛИ

SELECT (DATE (year || '-01-01'))

ref: http://www.postgresql.org/docs/current/interactive/functions-formatting.html
Примечание: я не работал с PostgreSQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...