with demo (start_date, end_date) as
( select timestamp '2019-12-31 00:00:00', timestamp '2020-06-04 00:00:00' from dual union all
select timestamp '2020-01-31 00:00:00', timestamp '2020-06-28 00:00:00' from dual
)
select end_date - start_date as elapsed_interval
, cast(end_date as date) - cast(start_date as date) as elapsed_days
from demo;
2条答案
按热度按时间jhiyze9q1#
我猜这些列是时间戳,而不是日期,因为结果是间隔而不是数字。正如您所发现的,oracle没有足够的时间来重载间隔的标准聚合函数(在oracle database ideas论坛上投票支持此功能),目前您仍然需要编写自己的或将时间戳转换为日期。
0yycz8jy2#
带日期的基础数学:
日期+数字=日期+天数(也可以是分数)
date-number=日期-天数
date-date=日期之间的天数(也是天数的分数)
日期+日期=不可能
months_between(date1,date2)=返回两个日期之间的月份
add_months(date,number)=将数字(months)添加到日期
如果您有一个字符串或数字,并且它可以是一年中的第n天(例如156),则可以使用to\u date('156','ddd')在date中进行转换
如果您有一个具有特定格式的字符串,您可以将其转换为date with to\ u date(字符串,您想象的日期格式)
https://www.techonthenet.com/oracle/functions/to_date.php
如果您需要相反的转换,即将日期转换为字符(或数字),请使用to\ char(日期,日期格式)