在 Redshift 中使用按子句分区时,日期值格式无效

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

我在红移方面面临一个新问题。当我尝试在 row_number 函数中使用 Partition by 子句时,我想要的日期转换格式无效。

例如:

SELECT   
  date_column,
  To_char(To_date(date_column, 'Mon DD, YYYY FMHH12:MI:SS AM'), 'YYYYMMDD') AS date_yyyymmdd,
  Row_number() OVER( partition BY id ORDER BY To_timestamp (last_updated_on, 'Mon DD, YYYY HH24:MI:SS PM' ) DESC ) AS rank
FROM     main_table limit 10

输出:

Jul 28,2017 02:47:26 PM      00170728       1
Aug 09,2017 03:50:00 PM      00170809       1
Sep 07,2017 01:55:00 PM      00170907       1
Sep 13,2017 12:45:00 PM      00170913       1
Sep 20,2017 04:20:00 PM      00170920       1

第一列是直接来自 main_table 的主日期列。第二列是转换后的日期列。因此,当我按条件删除分区时,转换后的日期列将按预期出现。但是按列添加分区,所需的日期格式变得无效。谁能帮我解决这个问题。

sql amazon-web-services amazon-redshift
1个回答
0
投票

我怀疑这可能是由于您的格式字符串不正确。 您的日期字符串在日期和年份之间的逗号后面没有空格 - “Jul 28,2017 02:47:26 PM”。 您格式化字符串是 - “Mon DD, YYYY FMHH12:MI:SS AM”。

我怀疑您的数据在添加此空间时不一致,并且当您添加窗口函数时,它正在更改前 10 行。 该窗口具有 order by 和 partition 子句,它们在运行时更改行在内存中的位置。它只是改变您所看到的行。

从格式中删除空格(如果它永远不存在)或添加额外的 FM 应该可以解决问题,如果我是正确的 - 'Mon DD,FMYYYY FMHH12:MI:SS AM'

© www.soinside.com 2019 - 2024. All rights reserved.