【问题标题】:DB2/IDAA: How to properly format VARCHAR to TIMESTAMP with millisecondsDB2/IDAA:如何以毫秒为单位将 VARCHAR 正确格式化为 TIMESTAMP
【发布时间】:2019-06-26 14:25:33
【问题描述】:

我正在为 DB2 使用 IDAA。在某一时刻,我使用 TO_DATE 来转换一些日期并且它可以工作:

TO_DATE('09/03/2018 06:49:23','MM/DD/YYYY HH:MI:SS')

但是当我在时间戳中有一个以毫秒为单位的 VARCHAR 值时,TO_DATE 会返回错误。我在网上环顾四周,找到了一个说使用 TO_TIMESTAMP 但不起作用的答案:

TO_TIMESTAMP('09/03/2018 06:49:23.443000','MM/DD/YYYY HH:MI:SS.NNNNNN')

我已经查看了这里的每个答案并尝试了许多变体。我已经尝试了 TO_TIMESTAMP、TO_DATE、TIMESTAMP_FORMAT 和毫秒格式的每一种组合,如 FF、FF6、NNNNNN。我收到这些错误:

NO AUTHORIZED FUNCTION NAMED TO_TIMESTAMP HAVING COMPATIBLE ARGUMENTS WAS FOUND. SQLCODE=-440

SQL error: SQLCODE = -904, SQLSTATE = 57011, SQLERRMC = Invalid Date.. SQLCODE=-904

也许 IDAA 会有所不同?我不知道。

我正在使用 IBM Data Studio 4.1.3 运行 DB2 for z/OS V11。

【问题讨论】:

  • 拨打TO_TIMESTAMP('09/03/2018 06:49:23','MM/DD/YYYY HH:MI:SS')会发生什么?您仍然收到相同的错误消息吗?您能否包含出现对TO_TIMESTAMP 的调用的完整 SQL 代码?
  • 它仍然无法将 TO_TIMESTAMP 识别为函数,但它适用于 TO_DATE。这是 SELECT 中唯一的代码行。
  • 我的直觉是您的 DB2 安装存在某种问题。您的代码看起来应该可以工作,至少根据 IBM 的 TO_TIMESTAMP 文档。
  • 请编辑您的问题以指定 Db2 服务器平台(z/OS、i 系列、Linux/Unix/Windows)及其版本 + 修复包。
  • 在 Db2 for z/OS 中没有 TO_TIMESTAMP 函数。 TO_DATETIMESTAMP_FORMAT 都应该工作。可能是您的输入字符串中有其他空白字符而不是 ASCII 空格 (0x20)。

标签: database db2 db2-zos


【解决方案1】:

此处记录了用于 Db2 for z/OS 的TIMESTAMP_FORMAT

https://www.ibm.com/support/knowledgecenter/en/SSEPEK_12.0.0/sqlref/src/tpc/db2z_bif_timestampformat.html

请注意HHHH12 相同,而不是HH24,因此可能是您需要的,例如

$ db2 "values TIMESTAMP_FORMAT('09/03/2018 16:49:23','MM/DD/YYYY HH24:MI:SS')"

1                         
--------------------------
2018-09-03-16.49.23.000000

  1 record(s) selected.

(以上来自 Db2 LUW,但我认为该功能在 Db2 for z/OS/ 和 DAA 上的工作方式相同)

【讨论】:

    【解决方案2】:

    基于以下链接 - https://www.ibm.com/support/knowledgecenter/en/SS4LQ8_4.1.0/com.ibm.datatools.aqt.doc/gui/concepts/c_idaa_inconsistencies.html

    IBM Db2 Analytics Accelerator for z/OS 不支持 Db2 支持的所有日期和时间格式。如果使用 VARCHAR_FORMAT 或 TIMESTAMP_FORMAT 标量函数,这可能会导致加速和内部 Db2 查询的不同结果。 IBM Db2 Analytics Accelerator for z/OS 不支持以下格式:

    FF[n] - fractional seconds (000000-999999)
    
    The optional number n is used to specify the number of digits to include in the return value. Valid values for n are the integers from 1-6. The default is 6.
    ID - ISO day of the week (1-7)
    
    The value 1 represents Monday. The value 7 represents Sunday.
    IYYY - ISO year (0000-9999)
    
    The last four digits of the year based on the ISO week that is returned.
    NNNNNN - microseconds (000000-999999)
    
    This format is equivalent to FF6.
    RR - last two digits of the year (00-99)
    SSSSS - seconds since the previous midnight
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      相关资源
      最近更新 更多