在存储 Java 8 LocalTime 时,我应该在 Oracle 数据库中使用哪种数据类型?

When storing Java 8 LocalTime, which data type should I use in an Oracle Database?

在大多数其他数据库中,我们会使用 TIME 数据类型,但 Oracle 似乎没有。

我试过 VARCHAR(最终存储为 1970 年 1 月)和 TIMESTAMP(存储为 1970 年 1 月,时间正确,但不允许再次检索)。

您可以使用以下数据类型:

  • TIMESTAMP 具有固定的年、月和日(您可以在列上放置一个检查约束以强制只有时间部分应该更改);
  • DATE 年月日不变(如果您不担心小数秒;同样,您可以使用检查约束);
  • INTERVAL DAY(0) TO SECOND;或
  • VARCHAR2 作为格式化的时间字符串。

无论您使用什么,您都需要将其从 Java LocalTime 对象转换为适当的数据类型,然后再将其保存在数据库中,然后在您使用时反转转换找回它。

Oracle 有两种基本数据类型可以处理 date/time。两者都是二进制结构,没有您想象的格式。 DATE 包含日期和时间,精确到秒:

  • 4 位数年份
  • 一个月中的第几天
  • 小时 - 24 小时制
  • 分钟

TIMESTAMP 类型类似于 DATE,但将时间解析为纳秒级。它还具有处理时区的变体。

在 DATE 和 TIMESTAMP 中,午夜时间都是 00:00:00(或 00:00:00.000000 对于 TIMESTAMP)。

尝试以任何类型的字符串类型(例如 VARCHAR2)存储日期或时间戳是一个 巨大 设计缺陷。如果您看到 date/time 实际上只是一个字符串,则需要使用 @SanjeevRM 所示的 DATE 或 TIMESTAMP 文字或使用 TO_DATE 或 TO_TIMESTAMP 职能。当您需要将 DATE 或 TIMESTAMP 格式化为供人类使用的字符串时,您可以使用 TO_CHAR 函数。