PostgreSQL - 转换年初至今

时间:2011-12-28 13:27:43

标签: postgresql

int :2009,2010等方式提供 我想转换此信息为 DATE (1月1日)。

我的解决方案(我更喜欢第一个):

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

是否有更好的(内置)或更优雅,更快的解决方案? (我目前正在使用 PostgreSQL 8.4 ,但也对更新的版本感兴趣。)

4 个答案:

答案 0 :(得分:10)

我认为这是最简单的方法:

to_date(year::varchar, 'yyyy')

答案 1 :(得分:4)

SELECT to_date(2011::text, 'YYYY');

注意:任何基于默认转换的代码都是错误的。有人可以将默认格式 datestyle 更改为某个意外值,此代码将失败。使用to_date或to_timestamp是非常可取的。 to_date to_timestamp 相对昂贵,但它非常强大。

答案 2 :(得分:1)

to_date('01 Jan ' || year, 'DD Mon YYYY')

OR

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

参考:http://www.postgresql.org/docs/current/interactive/functions-formatting.html
注意:我没有使用PostgreSQL

答案 3 :(得分:1)

一种可能性:

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

我喜欢这种方式,因为它避免了文本和整数之间的转换(一旦解析了所有常量)。