【问题标题】:saving data with time in database column在数据库列中随时间保存数据
【发布时间】:2020-11-02 18:07:03
【问题描述】:

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

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

然后我也可以看到timestamp。但它是特定于会话的。我想要这个改变。

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

我需要对database 进行哪些更改?我的理解有什么问题吗

【问题讨论】:

  • 我通常只是将日期转换为时间戳来查看时间分量。
  • @GordonLinoff 谢谢 Gordon ..实际上是它的遗留系统,因此无法更改数据类型。还有其他选择吗?
  • 您不能将 SQL Developer 配置为以独立于 NLS_DATE_FORMAT 的预定义格式显示 DATE 值吗?
  • 实际上我需要在日志文件中打印日期和时间。在日志文件中它只打印日期

标签: oracle oracle11g oracle12c date-formatting


【解决方案1】:

您的意思是,针对整个数据库和所有用户?与您的 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>

看起来不错。


但是:主题标题说:

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

除非您“删除”时间组件(例如,通过截断值,例如 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>

【讨论】:

    猜你喜欢
    • 2022-11-15
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多