我的公司最近从 Redash 迁移到 Redshift,我很难重新创建 MySQL 中可用但 Redshift 中不可用的 YEARWEEK() 函数。我到处搜索以找到一种方法来做到这一点,但似乎找不到正确的资源,因为我的时间也很紧迫。
表:订单
列:创建于
存储为: 29/03/21 03:02 -- 通过 date_add() 在此处添加 8 小时
所需输出: 202113 --yearweek() yyyyww
在 MySQL 中,这给了我正确的输出 YEARWEEK(DATE_ADD(o.created_at, INTERVAL 8 HOUR))
您应该能够按照以下方式在此处使用
DATE_PART
:
CONCAT(DATE_PART(y, o.created_at + interval '8 hours'),
DATE_PART(w, o.created_at + interval '8 hours'))
请注意,尚不清楚上述内容是否会产生与 MySQL 的
YEARWEEK
函数相同的输出。
SELECT TO_CHAR(created_at + interval '8 hours', 'IYYY-IW');
“IW”:ISO 一年中的周数(新年的第一个星期四在第一周。)
fcce的答案是正确的
Tim Biegleisen 的答案是不正确的,因为 ISO 日期周系统与一年中第一周的工作方式有关。我建议检查一下标准 https://en.wikipedia.org/wiki/ISO_week_date
例如。
SELECT DATE_PART('year', '2017-01-01')::char(4)||'W'||DATE_PART('w', '2017-01-01')
-- yields 2017W52... this is incorrect