【问题标题】:Oracle select date without time and keep date as data typeOracle选择没有时间的日期并将日期保留为数据类型
【发布时间】:2017-04-17 22:53:43
【问题描述】:

我有一个列名 'Cos_Date',其值类似于 14APR2017:00:00:00。

但是,对于新的列名称'Arrival_Date',我想保留日期信息但省略时间,并将数据类型保留为Date 而不是Character。例如,2017 年 4 月 14 日。

我试过了:

  select TO_CHAR(Cos_Date, 'DD-MON-YYYY') ARRIVAL_DATE

但是会删除时间信息,但是数据类型变成Character

我在这个网站上搜索过,两个都试过了:

  select TO_DATE(TO_CHAR(Cos_Date, 'DD-MON-YYYY'), 'DD-MON-YYYY')  ARRIVAL_DATE

和:

  select TRUNC(Cos_Date) ARRIVAL_DATE

但它不会省略时间信息。

我可以试试别的吗?

谢谢!

【问题讨论】:

  • 在 Oracle 中没有“纯”日期数据类型。日期数据类型始终包含时间组件。您可以做的最好的事情是让日期的时间分量为 00:00:00。为什么这会困扰你?甲骨文的这种“限制”并没有造成任何问题。 (由于缺少“纯”时间数据类型,个问题,没有附加日期,但这与您的问题无关。)
  • 哦,我明白了。由于我使用 SAS 调用 Oracle 并将让该表加入另一个包含数据类型为“日期”的 SAS 表。这让我很困扰。也许我可以再做一个 data / proc sql 步骤。谢谢@mathguy
  • 我不知道 SAS 如何与 Oracle 一起工作,但如果它完全可以工作,并且如果 SAS 具有“纯”日期数据类型,我假设它被转换为时间设置为 00 的日期甲骨文中的:00:00。如果您有两个具有此类日期列的 SAS 表,您可以简单地在 Oracle 中将它们连接起来,所有日期的时间部分为 00:00:00 不会导致连接出现问题。
  • @mathguy 对,我去看看,这是可行的。

标签: oracle date time


【解决方案1】:

在 Oracle 中,没有只有年-月-日组件的日期数据类型。

DATE 数据类型在内部存储为 7- or 8-bytes,它始终具有年(2 字节)、月(1 字节)、日(1 字节)、小时(1 字节)、分钟(1 -byte) 和第二个 (1-byte)。

TIMESTAMP 数据类型也有小数秒(也可以有时区)。

我可以试试别的吗?

不,您要么使用VARCHAR2 字符串,要么使用DATETIMESTAMP 并接受它包含时间组件。

【讨论】:

    【解决方案2】:

    您不能“省略”Oracle 中 DATE 列的时间部分。 DATE 数据类型始终包含时间组件。如果你不想看到时间,就不要显示它,例如,

    SELECT TO_CHAR(TRUNC(Cos_Date),'DD-MON-YYYY') FROM dual;
    

    【讨论】:

    • 好的,我明白了。谢谢!
    【解决方案3】:

    选择没有时间的日期值:

    SELECT date_col
      FROM table
     WHERE TO_CHAR (date_col, 'HH24:MI:SS') = '00:00:00';
    

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2021-11-19
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      相关资源
      最近更新 更多