【问题标题】:Why is the return type of sysdate DATE? [closed]为什么返回类型是 sysdate DATE? [关闭]
【发布时间】:2022-01-13 18:55:01
【问题描述】:

Sysdate 返回当前系统日期和时间,其返回类型为日期。但是日期类型不应该只包含日期信息而不是时间信息。为什么这是可以接受的?

【问题讨论】:

  • Oracle 数据类型 DATE 有点误导。事实上它总是包含日期+时间值。如果想跳过时间部分,请使用TRUNC(SYSDATE)。但是,它仍然有时间值,只是设置为00:00:00
  • The documentation for the DATE data type 表示“此数据类型包含日期时间字段 YEAR、MONTH、DAY、HOUR、MINUTE 和 SECOND”。你觉得哪一部分不可接受; DATE 包括时间(这是一个非常早的决定,但具有误导性/混淆),或者 SYSDATE 返回一个 DATE(这似乎是合理的),或者它返回的日期包括时间? (TIMESTAMP 来晚了,再改DATE 不包括时间已经来不及了……)

标签: sql oracle date


【解决方案1】:

回首往事:

  • Oracle version 2 was released in 1979
  • 美国国家标准协会于 1986 年采用 SQL 作为标准。
  • ISO 9075:“信息技术数据库语言 - SQL”于 1987 年被采用。
  • Oracle 版本 6 于 1988 年发布。

因此,Oracle 对 DATE 数据类型的实现早于 ANSI 标准,Oracle 选择保留其原始实现,而不是破坏数据库版本的向后兼容性以实现 ANSI/ISO 标准。

但日期类型不应该只包含日期信息而不是时间信息。

ANSI/ISO 标准规定 DATE 包含年、月和日组件。

Oracle 的实施早于 ANSI/ISO 标准,并且由于历史原因不符合它。它是一种二进制数据类型,由 7 个字节组成,分别代表世纪、世纪、月、日、小时、分钟和秒。它总是拥有这些组件。

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 2020-05-19
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多