在存储 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 函数。
在大多数其他数据库中,我们会使用 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 函数。