【问题标题】:How to convert a TZ Datetime to Timestamp(3) in Flink SQLFlink SQL中如何将TZ Datetime转换为Timestamp(3)
【发布时间】:2021-12-16 21:21:14
【问题描述】:

在 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。

【问题讨论】:

    标签: apache-flink flink-sql


    【解决方案1】:

    Flink 知道两种字符串格式的时间戳表示:SQLISO-8601

    SQL 遵循2021-12-16 20:29:37 并被TO_TIMESTAMP 接受。这也是CAST(ts AS STRING) 的结果。

    ISO-8601 遵循2021-12-16T20:29:37,可能会被未来的内置实用程序函数所接受。

    问题是:如何通过打印“离开 SQL 世界”?如果你留在表生态系统中并调用table.execute().print(),未来的 Flink 版本将打印 SQL 格式。 SQL 客户端也将执行此操作。至少这将是 Flink 1.15 中的行为,并且可能已经是 Flink 1.14 中的情况。

    如果您执行table.execute().collect().forEach(println),您会打印“通过Java 世界”,这意味着调用java.time.LocalDateTime.toString,它使用ISO-8601 格式。

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 2020-12-15
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 2020-03-04
      相关资源
      最近更新 更多