【问题标题】:updating timestamp column with timestamp containing 'T'使用包含“T”的时间戳更新时间戳列
【发布时间】:2014-07-08 17:47:58
【问题描述】:

我有时间戳列:

MAX_LOAD_DATE_TS  TIMESTAMP(6)

我的load_datesdatetime 之间用T 格式化。

2014-07-02T10:46:22

有没有办法在 oracle 上将其转换为合法的timestamp

【问题讨论】:

    标签: oracle timestamp


    【解决方案1】:

    如果它们被双引号括起来,您可以在格式字符串中嵌入文字:

    select to_timestamp('2014-07-02T10:46:22', 'YYYY-MM-DD"T"HH24:MI:SS') from dual;
    
    TO_TIMESTAMP('2014-07-02T10:46:22','YYYY-MM-DD"T"HH24:MI:SS')
    -------------------------------------------------------------
    02-JUL-14 10.46.22.000000000                                  
    

    这适用于to_date()to_timestamp(),而to_char() 则相反。

    这是提到in the documentation

    日期时间格式模型中的标点符号和字符文字

    您可以在日期格式模型中包含这些字符:

    • 连字符、斜杠、逗号、句号和冒号等标点符号
    • 字符文字,用双引号括起来

    这些字符出现在与返回值相同的位置 它们出现在格式模型中。

    【讨论】:

      【解决方案2】:

      您可以使用适当的格式字符串以及 CAST 函数,如下所示:

      SELECT 
              CAST(TO_DATE('2014-07-02T10:46:22', 'YYYY-MM-DD"T"HH24:MI:SS') AS TIMESTAMP(6)) AS timestamp_value
      FROM table;
      

      Related question

      【讨论】:

      • 您需要在格式掩码中使用双引号“T”。否则,您将收到 ORA-01821 日期格式无法识别错误,因为 Oracle 会尝试将 T 解释为有效的格式掩码之一。
      • @JustinCave 是的,请注意。我已经更新了上面的答案。
      • 不知道为什么要使用cast(to_date() as timestamp) 而不仅仅是to_timestamp()
      • @AlexPoole 只是因为我不知道更好。谢谢你的来信。
      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多