【问题标题】:Can we extract time from date column that store only date not time?我们可以从只存储日期而不是时间的日期列中提取时间吗?
【发布时间】:2018-10-04 01:53:42
【问题描述】:

我有一个表格,其中包含 date(datecreated) 列和示例数据 2.10.2017 所以我想知道插入数据的时间,但我只存储日期而不是时间。 我可以提取时间吗?

【问题讨论】:

  • 使用trunc(datecreated)

标签: sql oracle date oracle12c


【解决方案1】:

时间分量肯定是有的,使用TO_CHAR可以看到:

SELECT TO_CHAR(DATECREATED, 'DD-MON-YYYY HH24:MI:SS')
  FROM YOUR_TABLE;

但是,如果您没有设置创建记录的时间,则 HOUR、MINUTE 和 SECOND 字段应全部为零。换句话说,如果你做了类似的事情

INSERT INTO YOUR_TABLE (DATECREATED) VALUES (TO_DATE('09-OCT-2010', 'DD-MON-YYYY'));

日期的时间分量将为零。

dbfiddle here

【讨论】:

    【解决方案2】:

    Oracle 中的date 类型还包括小时、分钟等。因此,除非您在插入时截断它,否则它会被存储。但是在默认设置下,一些客户端不显示它们。

    试试

    SELECT to_char(datecreated, 'YYYY-MM-DD HH24:MI:SS')
           FROM elbat;
    

    获取年、月、日、时、分、秒。

    【讨论】:

      【解决方案3】:

      这是一个常见的误解 - DATE 数据类型始终为 stored in Oracle tables as 7 bytes,包含年(2 个字节)、月、日、小时、分钟和秒(每个 1 个字节)。它永远不会只存储年/月/日组件。

      但是,如果您不向 Oracle 提供有关将什么放入时间组件的任何信息,那么 Oracle 会将这些组件设置为其默认值零。

      如果你这样做:

      CREATE TABLE table_name ( value DATE );
      INSERT INTO table_name
        SELECT DATE '2018-01-01' FROM DUAL UNION ALL
        SELECT CAST( TIMESTAMP '2018-10-04 08:20:14' AS DATE ) FROM DUAL;
      

      然后:

      SELECT TO_CHAR( value, 'YYYY-MM-DD"T"HH24:MI:SS' ) AS formatted,
             DUMP( value ) AS dmp,
             EXTRACT( HOUR FROM CAST( value AS TIMESTAMP ) ) As hr
      FROM   table_name;
      

      输出:

      FORMATTED           DMP                                HR
      ------------------- ---------------------------------- --
      2018-01-01T00:00:00 Typ=12 Len=7: 120,118,1,1,1,1,1     0
      2018-10-04T08:20:14 Typ=12 Len=7: 120,118,10,4,9,21,15  8
      

      显示有时间分量;您可以使用TO_CHAREXTRACT 函数提取它们;如果你不指定值,它们默认为零。

      我只存储日期而不是时间。我可以抽出时间

      不,如果您没有指定时间,那么 Oracle 会将日期值的小时、分钟和秒默认为 00:00:00

      如果您使用SYSDATE(或类似的东西)插入日期,那么它将有一个非零时间组件,并且您的用户界面不会显示时间组件,您可以使用TO_CHAR等。覆盖用户界面的默认日期格式并获取信息。

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 2019-12-14
        • 1970-01-01
        相关资源
        最近更新 更多