在postgres中复制mysql yearweek函数

cbjzeqam  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(463)

将一个项目从使用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获得相同的结果?我试过对年和周使用提取函数,然后将它们连接起来,但是postgres有时会返回53作为年初的日期,这会让一切都不正常。

bmvo0sr5

bmvo0sr51#

你可以使用这个函数 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

相关问题