正常日期减法看起来像这样:
SELECT TO_DATE('12-29-2019') - TO_DATE('12-20-2019') FROM DUAL
/* RESULT: 9 */
[当我将TIMESTAMP
转换为DATE
时,Oracle会截断小时/分钟/秒,并产生一个“整体” DATE
值。
SELECT CAST(LOCALTIMESTAMP AS DATE) FROM DUAL
/* RESULT: 12/07/2019 */
但是,当用CAST
中的TIMESTAMP
进行日期减法时,我不再得到整数。
SELECT TO_DATE('12-29-2019') - CAST(LOCALTIMESTAMP AS DATE) FROM DUAL
/* RESULT: 21.0999421296296296296296296296296296296 */
为什么在Oracle中将TIMESTAMP转换为DATE时日期减法不产生整数?
因为您所看到的不是您所拥有的。
这是您的命令和结果:
SQL> SELECT CAST(LOCALTIMESTAMP AS DATE) FROM DUAL;
CAST(LOC
--------
07.12.19
但是那只是因为日期格式是这样设置的。
如果您更改会话并设置不同的格式,则会得到
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> SELECT CAST(LOCALTIMESTAMP AS DATE) FROM DUAL;
CAST(LOCALTIMESTAMP
-------------------
07.12.2019 22:44:47
SQL>
这是完全不同的,不是吗?这就是为什么您得到十进制数的原因。 TRUNC
首先删除时间成分。