如何使用 TO_DATE 获取 TO_CHAR 给出的格式?
首先,DATE没有任何格式。Oracle 不会以您看到的格式存储日期。它在内部以7 个字节存储它,每个字节存储日期时间值的不同分量。
Byte Description
---- -------------------------------------------------
1 Century value but before storing it add 100 to it
2 Year and 100 is added to it before storing
3 Month
4 Day of the month
5 Hours but add 1 before storing it
6 Minutes but add 1 before storing it
7 Seconds but add 1 before storing it
该格式仅用于显示目的。TO_DATE用于将文字转换为日期,与格式无关。要以所需格式显示日期,请将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>
TO_DATE((选择逻辑日期
这是错误的。
切勿在DATE列上应用TO_DATE 。它迫使甲骨文:
基于特定于语言环境的 NLS 设置。您需要TO_DATE将文字转换为日期。对于date-arithmetic,保留日期不变。