更改日期格式后,它没有反映在 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_FORMAT
的 DATE
列。如果您想为 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_CHAR或TO_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>
为什么我在table中看不到变化???
A DATE
列没有“格式”。 DATE
(或TIMESTAMP
)值以二进制格式存储,仅在应用程序显示时才格式化。
因此,您看到的(真实的)DATE
列的任何格式都由显示数据的 客户端 应用。
您的第一个查询将 DATE
列转换为应用您指定格式的 varchar。
在第二个查询中 SQL*Plus 将默认格式应用到基于当前 NLS_DATE_FORMAT
的 DATE
列。如果您想为 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_CHAR或TO_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>