更改日期格式后,它不会反映在表格中

时间:2016-02-04 09:06:12

标签: sql oracle sqlplus date-formatting

enter image description here

为什么我看不到表格中的变化?

2 个答案:

答案 0 :(得分:3)

  

更改日期格式后,它不会反映在表格中

因为格式仅适用于显示

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

如果要显示,请使用 TO_CHAR 和正确的 FORMAT MODEL 。另外,请记住,格式设置具有优先顺序

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

  • 个人SQL语句

  • 中使用 TO_CHAR TO_DATE
  • 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