PostgreSQL提供extract
功能,根据ISO 8601标准获取日期的年份和周数,该标准包含每年的第一周,包含1月4日。
这些可以如下提取(使用今天作为日期):
select extract(isoyear from current_date);
select extract(week from current_date);
但似乎没有这个函数的反转。我正在寻找的是一种在ISO 8601年和一周内获得第一次约会的方法。有什么想法吗?
答案 0 :(得分:2)
to_date()
支持ISO年份和ISO周。
所以你首先需要获得“年初”(使用date_trunc()
),然后将其转换为正确的“周”(使用to_char()
)并将其转换回日期(使用to_date()
):
to_date(to_char(date_trunc('year', current_date), 'iyyy-iw'), 'iyyy-iw')
本声明:
select date_trunc('year', current_date),
to_char(date_trunc('year', current_date), 'iyyy-iw'),
to_date(to_char(date_trunc('year', current_date), 'iyyy-iw'), 'iyyy-iw');
在2015-12-07运行时返回:
date_trunc | to_char | to_date
--------------------+---------+-----------
2015-01-01 00:00:00 | 2015-01 | 2014-12-29