簡體   English   中英

如何在雪花中將 YYYY-MM-DD HH:MM:SS:MS 轉換為 MM/DD/YYYY

[英]How to convert YYYY-MM-DD HH:MM:SS:MS to MM/DD/YYYY in snowflake

我正在嘗試使用具有以下條件的 Snowflake 數據庫在視圖中將日期字段從YYYY-MM-DD HH:MM:SS:MS格式轉換為MM/DD/YYYY格式:

TO_VARCHAR(DATE(SRC_DATE),'MM/DD/YYYY')

我能夠在上述條件下將日期轉換為預期格式,但是當我嘗試使用 sp 將數據從此視圖加載到不同的表時,它失敗並出現以下錯誤:

失敗:代碼:939-State:22023-消息:SQL編譯錯誤:第1號錯誤第1行1,117734731788 1,058太多8842222004688 torme_________________________________thyyyyfore ymy__try_try_try.andy ymerf y.andy yr.ymthyyfr'ymmenty'ymmerf y。執行,第 9 行 position 58

需要幫助來獲得正確的邏輯來修復此錯誤。 我怎樣才能做到這一點?

你只需要做:

TO_VARCHAR(SRC_DATE,'MM/DD/YYYY')

我想知道您為什么要嘗試更改 Informatica 中的日期格式? 日期以數字形式保存,格式就是它的顯示方式 - 基礎數字不會改變

我不確定到底發生了什么,但我可以介紹一些我們確實知道的事情。

首先,錯誤消息說TO_VARCHAR() function 只需要一個參數。 知道了這一點,我們可以查看該方法的文檔 在這里我們看到有幾個重載:

TO_VARCHAR( <expr> )
TO_VARCHAR( <numeric_expr> [, '<format>' ] )
TO_VARCHAR( <date_or_time_expr> [, '<format>' ] )
TO_VARCHAR( <binary_expr> [, '<format>' ] )

這些重載中只有一個(第一個)符合錯誤消息。 大多數重載允許多個 arguments,但前提是第一個參數匹配特定類型:數字、日期/時間或二進制。 確實包括DATE() function 的預期日期結果

因此,我們可以以某種方式得出DATE(SRC_DATE)調用的結果在每種情況下都不是有效的<date_or_time_expr>的結論,這樣我們至少有時會以第一次重載結束。

雖然Date()的文檔確實允許 function 以多種方式返回NULL ,但它也明確返回 Date 類型:

返回值的數據類型為 DATE。

因此我仍然希望它始終匹配上面的第三個重載。 Date()的唯一其他可能結果是轉換失敗,在這種情況下,我們會看到完全不同的錯誤消息。

我能猜到的最好的解釋是Date()的返回類型與結果是否為NULL (即: NULL為此目的本質上是無類型的),這樣您仍然以第一次重載結束,這不允許第二個參數

您可以通過添加COALESCE()來解決此問題,因此NULL將轉換為有效的一致的一次性日期表達式; 比如說1900-01-01類的東西。 如果保留NULL值很重要,那么您也可以反過來將整個內容包裝在NULLIF()調用中。

最后,所有這一切只有在SRC_DATE還不是有效的<date_or_time_expr> 也就是說,如果它類似於 varchar 列。 這本身就已經是架構設計中的一個錯誤。 另一方面,如果它已經一個日期時間列,則根本不需要調用Date() ,它可以直接與TO_VARCHAR()一起使用......但可能與NULL值相同已經看到了

我們可以通過嘗試以下方法來檢驗這個理論:

TO_VARCHAR(DATE(IFNULL(SRC_DATE,'1900-01-01')),'MM/DD/YYYY')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM