[英]How to convert a TZ Datetime to Timestamp(3) in Flink SQL
如何在 Flink SQL v1.13 中將帶有TZ
的 DateTime 轉換為 Timestamp(3)?
TO_TIMESTAMP('2021-12-16T20:29:37Z', 'yyyy-MM-dd HH:mm:ss') //returns NULL
TO_TIMESTAMP('2021-12-16 20:29:37', 'yyyy-MM-dd HH:mm:ss') //returns 2021-12-16T20:29:37
TO_TIMESTAMP('2021-12-16T20:29:37', 'yyyy-MM-dd HH:mm:ss') //returns NULL, which is silly because this was the result from the 2nd example
它不接受T and Z
,但是“干凈”日期的轉換結果具有T
。 但是如果我嘗試反向操作,它會返回 null。
Flink 知道兩種字符串格式的時間戳表示: SQL
和ISO-8601
。
SQL 一個跟隨2021-12-16 20:29:37
TO_TIMESTAMP
。 它也是CAST(ts AS STRING)
的結果。
ISO-8601 遵循2021-12-16T20:29:37
並且可能會被未來的內置實用程序函數所接受。
問題是:如何通過打印“離開 SQL 世界”? 如果你留在 table 生態系統中並調用table.execute().print()
未來的 Flink 版本將打印 SQL 格式。 SQL 客戶端也將執行此操作。 至少這將是 Flink 1.15 中的行為,並且可能已經是 Flink 1.14 中的情況。
如果您執行table.execute().collect().forEach(println)
您打印“通過 Java 世界”,這意味着java.time.LocalDateTime.toString
被調用,它使用 ISO-8601 格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.