如何使 Amazon Redshift 中的 TO_DATE 在同一列中使用多种日期格式?
How can I make TO_DATE in Amazon Redshift work with multiple date formats in the same column?
我有一个包含日期时间值的字符串列,我需要将其转换为日期以计算密集排名。
此列可以采用以下 3 种格式中的任何一种:
MM-DD-YYYY H:MM:SS PM
M-DD-YYYY H:MM:SS PM
MM-D-YYYY H:MM:SS PM
我的 SQL 计算密集排名的语句基于这个日期时间列,我需要将其转换为日期以便降序排列:
DENSE_RANK()
OVER (PARTITION by [columnA] ORDER BY
TO_DATE(SUBSTRING([dateColumn],0,8), 'MM-DD-YYYY') DESC)
但是,我无法使用 TO_DATE
函数,因为我在同一列中有三种不同的格式。
如何使 Amazon Redshift 中的 TO_DATE 在同一列中使用多种日期格式?
而不是使用 SUBSTRING
,将整个 date-time 字段传递给具有 MM-DD-YYYY
格式的 TO_DATE
函数,该格式封装了上述所有 3 种格式.
Redshift 有一个默认关闭的严格模式 - TO_DATE(string, format, is_strict=false)
。当不在严格模式下时,时间会自动被丢弃& Redshift 足够聪明,可以推断如何将个位数转换为双位数。
您的其余代码可以正常工作。
演示:
--MM-DD-YYYY H:MM:SS PM
SELECT TO_DATE('05-15-2022 4:12:34 PM','MM-DD-YYYY');
--M-DD-YYYY H:MM:SS PM
SELECT TO_DATE('4-01-2022 8:45:06 PM','MM-DD-YYYY');
--MM-D-YYYY H:MM:SS PM
SELECT TO_DATE('04-9-2022 6:23:10 PM','MM-DD-YYYY');
输出:
2022-05-15
2022-04-01
2022-04-09
对于您的情况,这应该有效:
DENSE_RANK()
OVER (partition BY [columnA] ORDER BY
TO_DATE(datecolumn, 'MM-DD-YYYY') DESC)
P.S。首先,这些日期都应该采用相同的格式。
如果您负责生成数据,请仅以一种格式输出日期,以便让每个人的生活更轻松!
我有一个包含日期时间值的字符串列,我需要将其转换为日期以计算密集排名。
此列可以采用以下 3 种格式中的任何一种:
MM-DD-YYYY H:MM:SS PM
M-DD-YYYY H:MM:SS PM
MM-D-YYYY H:MM:SS PM
我的 SQL 计算密集排名的语句基于这个日期时间列,我需要将其转换为日期以便降序排列:
DENSE_RANK()
OVER (PARTITION by [columnA] ORDER BY
TO_DATE(SUBSTRING([dateColumn],0,8), 'MM-DD-YYYY') DESC)
但是,我无法使用 TO_DATE
函数,因为我在同一列中有三种不同的格式。
如何使 Amazon Redshift 中的 TO_DATE 在同一列中使用多种日期格式?
而不是使用 SUBSTRING
,将整个 date-time 字段传递给具有 MM-DD-YYYY
格式的 TO_DATE
函数,该格式封装了上述所有 3 种格式.
Redshift 有一个默认关闭的严格模式 - TO_DATE(string, format, is_strict=false)
。当不在严格模式下时,时间会自动被丢弃& Redshift 足够聪明,可以推断如何将个位数转换为双位数。
您的其余代码可以正常工作。
演示:
--MM-DD-YYYY H:MM:SS PM
SELECT TO_DATE('05-15-2022 4:12:34 PM','MM-DD-YYYY');
--M-DD-YYYY H:MM:SS PM
SELECT TO_DATE('4-01-2022 8:45:06 PM','MM-DD-YYYY');
--MM-D-YYYY H:MM:SS PM
SELECT TO_DATE('04-9-2022 6:23:10 PM','MM-DD-YYYY');
输出:
2022-05-15
2022-04-01
2022-04-09
对于您的情况,这应该有效:
DENSE_RANK()
OVER (partition BY [columnA] ORDER BY
TO_DATE(datecolumn, 'MM-DD-YYYY') DESC)
P.S。首先,这些日期都应该采用相同的格式。
如果您负责生成数据,请仅以一种格式输出日期,以便让每个人的生活更轻松!