为什么在将TIMESTAMP转换为DATE时日期减法不产生整数?

问题描述 投票:0回答:1

正常日期减法看起来像这样:

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 oracle casting oracle-apex date-arithmetic
1个回答
1
投票

因为您所看到的不是您所拥有的。

这是您的命令和结果:

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首先删除时间成分。

© www.soinside.com 2019 - 2024. All rights reserved.