为什么在将 TIMESTAMP 转换为 DATE 时日期减法不产生整数?
Why doesn't date subtraction produce whole numbers when casting TIMESTAMP to DATE?
正常的日期减法是这样的:
SELECT TO_DATE('12-29-2019') - TO_DATE('12-20-2019') FROM DUAL
/* RESULT: 9 */
当我将 TIMESTAMP
转换为 DATE
时,Oracle 会截断 hours/minutes/seconds 并生成 "whole" 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
它首先去除时间成分。
正常的日期减法是这样的:
SELECT TO_DATE('12-29-2019') - TO_DATE('12-20-2019') FROM DUAL
/* RESULT: 9 */
当我将 TIMESTAMP
转换为 DATE
时,Oracle 会截断 hours/minutes/seconds 并生成 "whole" 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
它首先去除时间成分。