代码之家  ›  专栏  ›  技术社区  ›  Textime

将Varchar2转换为时间

  •  0
  • Textime  · 技术社区  · 2 年前

    我想将VARCHAR2中的一列转换为与时间相关的数据类型。 例如,来自

    153312到15:33:12

    我试过了

    to_timestamp(column, 'hh24:mi:ss') as time_column
    

    ,但它给了我一个结果:

    01.11.23 15:33:120000000

    对此还有其他解决方案吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Alex Poole    2 年前

    Oracle没有时间数据类型。你正在转换为一个日期,所以你所看到的是意料之中的; from the documentation (表示日期,但也适用于时间戳):

    如果指定的日期值没有时间成分,则默认时间为午夜。如果指定的日期值没有日期,则默认日期为当月的第一天。

    由于您只提供了时间部分,因此默认为当月的第一天,即2023-11-01。

    然后,您的客户端或应用程序将时间戳值显示为字符串,根据其设置或NLS_timestamp_FORMAT会话参数进行格式化。

    顺便说一句,在你的格式掩码中包括冒号是没有意义的,因为你的原始字符串没有冒号。默认情况下,甲骨文在这类事情上是宽容的,但它看起来仍然是错误的。

    如果您只想查看时间部分,则将其转换回字符串,只需使用以下组件:

    to_char(to_timestamp(your_column, 'hh24miss'), 'hh24:mi:ss') as time_column
    

    根据您所拥有的值的范围,您也可以将其作为字符串进行操作,以插入分隔符冒号,但您可能需要先用零填充。

    您可以转换为间隔数据类型,这可能是比字符串(这可能是最糟糕的选项)更好的存储值的方式,但比日期或时间戳更难使用和格式化。不过,如果您计划将此时间值添加到另一个日期时间,这是很有用的——例如,如果您还将日期作为字符串存储在另一列中(这是另一种糟糕的做法)。

    fiddle