要将NUMBER 转换为TIMESTAMP,您可以使用TO_TIMESTAMP(TO_CHAR(...)) 之类的表达式。要计算两个时间戳之间的秒数,一种解决方案是将两者都转换为日期,然后减去它们:您将获得以天为单位的(十进制)结果,然后可以将其转换为秒。
考虑:
(
CAST(systimestamp AS DATE)
- CAST(TO_TIMESTAMP(TO_CHAR(190903210000), 'YYMMDDhh24miss') AS DATE)
) * 60 * 60 * 24
但是,由于时间戳的数字表示不包含小数秒(也不包含时区),直接转换为 DATE 可能会更简单,这将消除之后对 CAST 的需要,因此:
(
CAST(systimestamp AS DATE)
- TO_DATE(TO_CHAR(190903210000), 'YYMMDDhh24miss')
) * 60 * 60 * 24
Demo on DB Fiddle:
SELECT
systimestamp,
190903210000 num,
TO_TIMESTAMP(TO_CHAR(190903210000), 'YYMMDDhh24miss') num_as_timestamp,
(
CAST(systimestamp AS DATE) -
CAST(TO_TIMESTAMP(TO_CHAR(190903210000), 'YYMMDDhh24miss') AS DATE)
) * 60 * 60 * 24 diff
FROM DUAL;
系统时间戳 |数字 | NUM_AS_TIMESTAMP |差异
:------------------------------------------------ | ------------: | :-------------------------------- | ---:
03-SEP-19 09.13.39.989343 下午 +01:00 | 190903210000 | 03-SEP-19 09.00.00.000000000 下午 | 819
SELECT
systimestamp,
190903210000 num,
TO_DATE(TO_CHAR(190903210000), 'YYMMDDhh24miss') num_as_date,
(
CAST(systimestamp AS DATE)
- TO_DATE(TO_CHAR(190903210000), 'YYMMDDhh24miss')
) * 60 * 60 * 24 diff
FROM DUAL;
系统时间戳 |数字 | NUM_AS_DATE |差异
:------------------------------------------------ | ------------: | :----------------- | ----------------------------------------------------:
03-SEP-19 09.20.44.524445 下午 +01:00 | 190903210000 | 03-SEP-19 21:00:00 | 1243.999999999999999999999999999999999996