繁体   English   中英

如何在没有时间的情况下仅保存 Oracle 19c 中的日期

[英]How to save only Date in Oracle 19c without time

我不习惯Oracle ,同样的事情可以在MySQL中完成。 我的任务是我必须在 Oracle 19c 中保存日期,但没有时间。 我的应用程序语言是 J2EE。 在做了一些搜索后找到了一些解决方案,但我的要求还没有被满足。

解决方案 1: Insert a Datetime Value Using the TO_DATE Function

CREATE TABLE abe_student (
first_name VARCHAR2(50),
last_name VARCHAR2(50),
date_of_birth DATE
);

INSERT INTO abe_student (first_name, last_name, date_of_birth) 
VALUES ('John', 'Doe', TO_DATE('2016/01/16', 'yyyy/mm/dd'));

INSERT INTO abe_student (first_name, last_name, date_of_birth) 
VALUES ('John', 'Doe', TO_DATE('16/01/2016', 'dd/mm/yyyy'));

该溶液为 10g。 我试过这个,但它是用全零插入时间。 两个查询都给出相同的结果。

数据库插入结果

解决方案二(10g)trunc()

  1. 从您的 DATE 列中删除所有时间(更新 yourtable set yourdatecolumn = trunc(yourdatecolumn))

  2. 通过使用 check (yourdatecolumn = trunc(yourdatecolumn)) 在列上放置检查约束,确保所有未来日期不包含时间部分

  3. 调整所有 INSERT 和 UPDATE 语句,或者 - 如果幸运的话 - 调整 API,以仅插入 TRUNCed 日期。

根据说明,查询应如下所示:

update ABE_STUDENT set ABE_STUDENT.DATE_OF_BIRTH = trunc(DATE_OF_BIRTH);

执行步骤 1 后,我检查了数据库,但没有任何变化。

TRUNC()不工作,但TO_CHAR()工作正常。

SELECT TRUNC(DATE_OF_BIRTH), to_char(DATE_OF_BIRTH,'MM/DD/YYYY')  FROM ABE_STUDENT

truc 和 to_char 之后的结果

让我们介绍一下为什么我需要这种格式的数据的用例。 这个概念将用于金融服务交易分析,我只需要日期。 在复杂的查询时间,使用另一种方法来格式化日期,将是一个性能问题。

使用后更新TRUNC(DATE_OF_BIRTH, 'DAY')

SELECT TRUNC(DATE_OF_BIRTH, 'DAY'), to_char(DATE_OF_BIRTH,'MM/DD/YYYY')  FROM ABE_STUDENT

在此处输入图像描述

你不能。

Oracle 中的DATE是一种二进制数据类型,它始终包含7 个字节,分别代表世纪、世纪、月、日、小时、分钟和秒。

如果要显示不带时间组件的DATE数据类型,请将其转换为格式化字符串(在查询或用于访问数据库的第 3 方应用程序中使用TO_CHAR function)。

如果您想在不考虑时间分量的情况下存储DATE ,则插入这些值,以便它们始终在午夜具有时间分量; 您可以使用CHECK约束来强制执行此操作。

您可以使用生成的列来生成字符串形式。 我会使用:

alter table abe_student add column dob_string varchar2(255)
    generated always as (to_char(date_of_birth, 'YYYY-MM-DD'));

(我非常喜欢标准日期格式。)

然后您可以使用字符串列查询表。 瞧。 它会完全按照您的意愿出现。

您可以使用check约束确保该列没有时间组件:

alter table abe_student add constraint chk_abe_student_dob
    check (date_of_birth = trunc(date_of_birth));

或者,您可以将 GUI 界面配置为仅显示date列的日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM