在数据库列中随时间保存数据

saving data with time in database column

从UI发送date,然后在database我可以看到date without timestamp。当我这样做时

alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS'

那我也能看到timestamp了。但它是特定于会话的。我希望这个改变永久有效。

我希望 timestampdate 一起永久保存在数据库中。在日志文件中它只显示日期而不显示时间。

我需要在 database 中做哪些更改?我的理解有问题吗

您的意思是,针对整个数据库和所有用户?与您的 DBA 交谈,他们应该知道。那将是 nls_date_format 初始化参数。

或者,创建将修改该值的 after logon 数据库触发器,例如

SQL> show user
USER is "SYS"
SQL> create or replace trigger trg_dflt_date_format
  2    after logon on database
  3  begin
  4    execute immediate q'[alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss']';
  5  end;
  6  /

Trigger created.

当前格式是什么?

SQL> select sysdate from dual;

SYSDATE
--------
13.07.20

确定,注销并重新登录:

SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

C:\temp>sqlplus scott/tiger

SQL*Plus: Release 11.2.0.2.0 Production on Pon Srp 13 16:55:08 2020

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> select sysdate from dual;

SYSDATE
-------------------
13.07.2020 16:55:12

SQL>

看起来不错。


但是:主题标题说:

saving data with time in database column

除非您“删除”时间部分(例如通过截断值,例如 trunc(sysdate)),否则 Oracle 将同时存储日期和时间。这就是您显示它的方式。

一个选项是使用 alter session(如您所知),另一个选项是使用具有所需格式掩码的 to_char 函数,例如

SQL> select to_char(sysdate, 'hh24:mi:ss yyyy-mm-dd') right_now from dual;

RIGHT_NOW
-------------------
16:59:29 2020-07-13

SQL>