Gif*_*guy 1 sql oracle casting date-arithmetic oracle-apex
正常的日期减法如下所示:
SELECT TO_DATE('12-29-2019') - TO_DATE('12-20-2019') FROM DUAL
/* RESULT: 9 */
Run Code Online (Sandbox Code Playgroud)
当我将 a 转换TIMESTAMP为 a 时DATE,Oracle 会截断小时/分钟/秒并生成一个“整体”DATE值。
SELECT CAST(LOCALTIMESTAMP AS DATE) FROM DUAL
/* RESULT: 12/07/2019 */
Run Code Online (Sandbox Code Playgroud)
但是当CAST从 a执行日期减法时TIMESTAMP,我不再得到整数。
SELECT TO_DATE('12-29-2019') - CAST(LOCALTIMESTAMP AS DATE) FROM DUAL
/* RESULT: 21.0999421296296296296296296296296296296 */
Run Code Online (Sandbox Code Playgroud)
在 Oracle 中将 TIMESTAMP 转换为 DATE 时,为什么日期减法不会产生整数?
因为你所看到的并不是你所拥有的。
这是您的命令和结果:
SQL> SELECT CAST(LOCALTIMESTAMP AS DATE) FROM DUAL;
CAST(LOC
--------
07.12.19
Run Code Online (Sandbox Code Playgroud)
但是,那只是因为日期格式是这样设置的。
如果你改变会话并设置不同的格式,那么你会得到
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>
Run Code Online (Sandbox Code Playgroud)
这是完全不同的,不是吗?这就是为什么你得到十进制数的原因。TRUNC它首先删除时间组件。