将项目从使用MySQL转换为Postgres,并且无法弄清楚如何复制MySQL的Yearweek函数。
例如,MySQL中的以下内容:
select CAST(yearweek(user.created_at) AS CHAR CHARACTER SET utf8) as yrwk, user.created_at
返回:
"201452" "2014-12-31 00:00:00" "1"
"201601" "2016-01-05 00:00:00" "60"
"201601" "2016-01-09 00:00:00" "47"
"201623" "2016-06-08 14:40:37" "69"
如何使用postgres获得相同的结果?我曾尝试对YEAR和WEEK使用EXTRACT函数,然后将它们连接起来,但是postgres有时会在年初返回针对日期的53,这使一切变得不合时宜。
答案 0 :(得分:1)
您可以将函数TO_CHAR
与适当的格式字符串一起使用。
要准确复制YEARDATE的行为,必须将日期截断到所包含的一周的开始。
SELECT TO_CHAR(DATE_TRUNC('week', NOW()), 'YYYYWW')
-- outputs:
201826
,并使用您的示例日期:
WITH dates(dt) AS (
VALUES
('2014-12-31 00:00:00'::timestamp),
('2016-01-05 00:00:00'::timestamp),
('2016-01-09 00:00:00'::timestamp),
('2016-06-08 14:40:37'::timestamp)
)
SELECT dt, TO_CHAR(DATE_TRUNC('week', dt), 'YYYYWW') yrwk
FROM dates;
-- outputs:
dt | yrwk
---------------------+--------
2014-12-31 00:00:00 | 201452
2016-01-05 00:00:00 | 201601
2016-01-09 00:00:00 | 201601
2016-06-08 14:40:37 | 201623