【问题标题】:Oracle Get only time from To_Date() in a Query?Oracle 在查询中仅从 To_Date() 获取时间?
【发布时间】:2011-08-12 15:14:34
【问题描述】:

我有一个插入查询:

INSERT INTO THE_TABLE (Field_A) 
VALUES (TO_DATE('08/12/2011 08:35:42 AM','HH:MI:SS PM'))
WHERE Something = 'SomethingElse'

Field_A 是一个日期字段。当我执行查询时,Field_A 仍然显示日期和时间。

有没有办法只抓住时间?

我尝试过 To_Char(),但随后它转换为字符串并且该字段不会接受它。

我也试过 TO_DATE('08:35:42 AM','HH:MI:SS PM') 也不管用,它仍然在表格中显示日期和时间。

【问题讨论】:

    标签: sql oracle to-date


    【解决方案1】:
    TO_DATE('08:35:42 AM','HH:MI:SS PM')
    

    这不起作用的原因是这不是一个完整的日期。即使您使用 to_date('07/12/2011','MM/DD/YYYY'),Oracle 也会存储日期和时间,但会使时间的所有组成部分为零。所以实际存储的日期是 07/12/2011 HH:MI:SS

    如果您想单独存储时间组件,它应该是一个 varchar 字段,您需要将其添加到日期部分以获取完整的日期。例子..

    Select to_date(
              to_char(date_field_stored_as_date,'DD-MON-YYYY') || 
              ' ' ||
              to_char(time_field_stored_as_varchar),
             'DD-MON-YYYY HH24:MI:SS'    
           )
    

    【讨论】:

      【解决方案2】:

      如果您的字段是日期字段,您将始终拥有日期时间的日期部分。

      您可以将其存储为其他内容,例如秒数,然后使用转换函数将其转换为时间。由于TO_CHAR 似乎不会接受数字并一次转换,因此您必须在应用程序端执行此操作。

      所以我还是将其存储为DATE 以避免混淆;使用时忽略日期部分。

      顺便说一句,这个:

      我尝试过 To_Char(),但是它转换为字符串并且字段不会接受它。

      不太对,因为正确格式的字符串会隐式转换为DATEs。

      【讨论】:

        猜你喜欢
        • 2020-09-02
        • 2014-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 1970-01-01
        相关资源
        最近更新 更多