【问题标题】:Oracle: Date Format Problems YYYY-MM-DDOracle:日期格式问题 YYYY-MM-DD
【发布时间】:2020-11-27 09:39:09
【问题描述】:

我有一个看起来很幼稚(实际上可能很幼稚)但我无法解决的问题......

问题是我正在尝试将一些数据从 Pentaho 插入 Oracle 数据库,在 Pentaho 中我的日期格式为 YYYY-MM-DD,但在 Oracle 中它显示为 YYYY-MM-DD 00:00:00。关键是属性的格式是Date,当我手动通过SQL向表中插入数据时,也是一样的。

INSERT INTO TABLE1
VALUES(TO_DATE('2012-02-01','yyyy-mm-dd'))

当我将数据可视化时,我又看到了2012-02-01 00:00:00。 我正在使用 Dbeaver,当我转到属性查看日期格式时,它显示为 YYYY-MM-DD,所以我不明白发生了什么,也不知道如何解决它。

谢谢!

【问题讨论】:

  • 那是因为 Oracle date always 包含时间部分。展示它非常有意义。

标签: oracle date datetime dbeaver


【解决方案1】:

oracle 中显示的日期格式取决于NLS_DATE_FORMAT 参数。但请注意,oracle 不会以任何格式存储日期,但它有自己的日期二进制表示。

因此您可以配置在会话中、在数据库级别或在实例级别查看日期的方式。

在会话级别,您可以更改NLS_DATE_FORMAT,如下所示:

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

Session altered.

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
----------
2020-11-27

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
2020-11-27 15:17:02

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';

Session altered.

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-----------
27-NOV-2020

SQL>

要检查NLS_DATE_FORMAT的当前值,可以使用以下视图:

SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';
SELECT * FROM NLS_INSTANCE_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';

【讨论】:

  • dbeaver IDE 是否使用 NLS 设置来格式化其值?
  • 是的,您也可以使用ALTER SESSION 命令更改它,如答案所示。
  • 谢谢,但它不起作用:(我不知道为什么,但我仍然检索 YYYY-MM-DD 00:00:00 甚至在执行 ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM -DD'。我检查了 NLS_DATE_FORMAT 的值,它是 'YYYY-MM-DD'。
  • ALTER SESSION 命令在 dbeaver 中有效 - github.com/dbeaver/dbeaver/issues/881
  • Dbeaver 是基于 Java 的,即 NLS_DATE_FORMAT 不适用 - 除非 Dbeaver 在内部查询格式。
【解决方案2】:

我不会依赖 NLS_DATE_FORMAT nls 参数(如果您有多个查询需要以不同格式输出日期怎么办?)。如果您需要以特定格式查看日期,请使用to_char(),例如:

SELECT to_char(date_col, 'dd/mm/yyyy') date_col
FROM   table1;

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多