在postgres中复制MySQL yearweek函数

时间:2018-06-28 00:56:11

标签: mysql postgresql date week-number

将项目从使用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,这使一切变得不合时宜。

1 个答案:

答案 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