我正在尝试计算存储在同一个表中的一系列日期之间的天数。使用DATEDIFF查询没有问题,我在表中有开始日期和结束日期。我正在努力计算我只有一个开始日期的日子(表是兼职工作的员工的服务历史,最近的数据行是开放式的),因此我想使用当前日期来替换空白以计算迄今为止的服务。
答案 0 :(得分:0)
使用coalesce()
和当前日期。在ANSI SQL中,这将是coalesce(end_date, CURRENT_DATE)
。
但是,datediff()
建议使用SQL Server(或者MySQL)。在SQL Server中:
select datediff(day, start_date, coalesce(end_date, getdate())) as days_of_service
答案 1 :(得分:0)
试试这个:
DATEDIFF ( datepart , startdate , enddate )
SELECT DATEDIFF(DAY, '1/1/2018', '4/4/2018');
答案 2 :(得分:0)
如果您感兴趣(或其他任何人),这里是Oracle的解决方案:
select trunc(sysdate - to_date('03/04/2018','dd/mm/yyyy')) as days,
trunc(mod(sysdate - to_date('03/04/2018','dd/mm/yyyy'),1) * 24) as hours,
trunc(mod(mod(sysdate - to_date('03/04/2018','dd/mm/yyyy'),1) * 24, 1) * 60) as minutes
from dual
查询sysdate - to_date('some date','dd/mmy/yyyy')
会将天数,分钟,秒等作为浮点数返回给您。为了获得正确的小时数和分钟数,您只需要获取 decimal 部分(通过mod
运算符),然后将其乘以24, 60,分别。