我有一個包含日期時間值的字串列,我需要將其轉換為日期以計算密集排名。
此列可以具有以下 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 在同一列中使用多種日期格式?
uj5u.com熱心網友回復:
而不是使用SUBSTRING,將整個日期時間欄位傳遞給TO_DATE函式,其MM-DD-YYYY格式封裝了上述所有 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)
PS 首先,這些日期都應該采用相同的格式。
如果您負責生成資料,請僅以一種格式輸出日期,以使每個人的生活更輕松!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459835.html
