SQL Redshift 中的 YYYYWW 格式

问题描述 投票:0回答:3

我的公司最近从 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))

sql database function datetime amazon-redshift
3个回答
1
投票

您应该能够按照以下方式在此处使用

DATE_PART

CONCAT(DATE_PART(y, o.created_at + interval '8 hours'),
       DATE_PART(w, o.created_at + interval '8 hours'))

请注意,尚不清楚上述内容是否会产生与 MySQL 的

YEARWEEK
函数相同的输出。


0
投票
SELECT TO_CHAR(created_at + interval '8 hours', 'IYYY-IW');

“IW”:ISO 一年中的周数(新年的第一个星期四在第一周。)

Redshift 文档


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.