更改日期格式后,它没有反映在 table

After changing the date format it is not getting reflected in the table

为什么我在table中看不到变化???

A DATE 列没有“格式”。 DATE(或TIMESTAMP)值以二进制格式存储,仅在应用程序显示时才格式化。

因此,您看到的(真实的)DATE 列的任何格式都由显示数据的 客户端 应用。

您的第一个查询将 DATE 列转换为应用您指定格式的 varchar。

在第二个查询中 SQL*Plus 将默认格式应用到基于当前 NLS_DATE_FORMATDATE 列。如果您想为 DATE 列查看不同的格式,请更改 NLS_DATE_FORMAT

更多详细信息,请参阅手册:http://docs.oracle.com/database/121/NLSPG/ch3globenv.htm#NLSPG204

After changing the date format it is not getting reflected in the table

因为格式只适用于显示

A DATE 没有任何格式。 Oracle 不会以您看到的格式存储日期。它在内部存储在 7 bytes 中,每个字节存储 datetime 值的不同组成部分。

如果要显示,请使用 TO_CHAR 和适当的 FORMAT MODEL。另外,请记住,格式具有 优先顺序 :

让我们看看时间顺序,即从最高到最低:

  • 个人使用TO_CHARTO_DATE SQL声明

  • ALTER SESSION SET NLS_DATE_FORMAT=’whatever format model you want’;

  • 客户端机器

    上将其设置为OS环境变量
  • NLS_DATE_FORMAT的设置在数据库初始化参数

例如,

个人SQL声明:

SQL> SELECT HIREDATE, TO_CHAR(hiredate, 'YYYY-MM-DD') FROM emp;

HIREDATE            TO_CHAR(HI
------------------- ----------
17/12/1980 00:00:00 1980-12-17
20/02/1981 00:00:00 1981-02-20
22/02/1981 00:00:00 1981-02-22
02/04/1981 00:00:00 1981-04-02
28/09/1981 00:00:00 1981-09-28
01/05/1981 00:00:00 1981-05-01
09/06/1981 00:00:00 1981-06-09
09/12/1982 00:00:00 1982-12-09
17/11/1981 00:00:00 1981-11-17
08/09/1981 00:00:00 1981-09-08
12/01/1983 00:00:00 1983-01-12
03/12/1981 00:00:00 1981-12-03
03/12/1981 00:00:00 1981-12-03
23/01/1982 00:00:00 1982-01-23

14 rows selected.

会话级别:

SQL> alter session set nls_date_format='YYYY-MM-DD';

Session altered.

SQL> SELECT hiredate FROM emp;

HIREDATE
----------
1980-12-17
1981-02-20
1981-02-22
1981-04-02
1981-09-28
1981-05-01
1981-06-09
1982-12-09
1981-11-17
1981-09-08
1983-01-12
1981-12-03
1981-12-03
1982-01-23

14 rows selected.

SQL>