答案 0 :(得分:3)
更改日期格式后,它不会反映在表格中
因为格式仅适用于显示。
DATE 没有任何格式。 Oracle不会以您看到的格式存储日期。它将其内部存储在7 bytes
中,每个字节存储 datetime 值的不同组件。
如果要显示,请使用 TO_CHAR 和正确的 FORMAT MODEL 。另外,请记住,格式设置具有优先顺序:
让我们看一下时间顺序优先顺序,即从最高到最低:
在个人SQL语句
ALTER SESSION SET NLS_DATE_FORMAT=’whatever format model you want’;
在客户端计算机上将其设置为操作系统环境变量
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>
答案 1 :(得分:1)
DATE
列没有“格式”。 DATE
(或TIMESTAMP
)值以二进制格式存储,并且仅在应用程序显示时格式化。
因此,您为(真实)DATE
列看到的任何格式都会由显示数据的客户端应用。
您的第一个查询将DATE
列转换为应用您指定格式的varchar。
在第二个查询中,SQL * Plus将默认格式应用于当前DATE
的{{1}}列。如果您希望查看NLS_DATE_FORMAT
列的其他格式,请更改DATE
有关详细信息,请参阅手册:http://docs.oracle.com/database/121/NLSPG/ch3globenv.htm#NLSPG204