我在红移方面面临一个新问题。当我尝试在 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 的主日期列。第二列是转换后的日期列。因此,当我按条件删除分区时,转换后的日期列将按预期出现。但是按列添加分区,所需的日期格式变得无效。谁能帮我解决这个问题。
我怀疑这可能是由于您的格式字符串不正确。 您的日期字符串在日期和年份之间的逗号后面没有空格 - “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'