【问题标题】:Replicate MySQL yearweek function in postgres在 postgres 中复制 MySQL yearweek 函数
【发布时间】:2018-06-28 00:56:10
【问题描述】:

将项目从使用 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,这会使所有内容都失控。

【问题讨论】:

    标签: mysql postgresql date week-number


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 2018-11-13
      • 2012-10-23
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多