如何计算日期之间的天数

时间:2017-03-20 10:59:59

标签: sql oracle

我正在处理一个项目和输出我正在寻找,我需要计算一个约会和操作之间的天数,目前我有这个

Select Patient_FirstName ||' '|| Patient_surname "Patient Name", appointment_date, OPeration_date, datediff(Appointment_Date,Operation_Date) "Days till operation"
from PatientRecord p , Patient b, Appointment a, Operation o
where p.patient_ID = b.Patient_ID
and p.appointment_ID = a.appointment_ID
and p.operation_ID = o.OPeration_ID
order by Patient_Surname;

只是返回一个无效的标识符,

当我整整几个月它工作正常,但我需要几天

Select Patient_FirstName ||' '|| Patient_surname "Patient Name", appointment_date, OPeration_date, Round (months_between(Appointment_Date,Operation_Date)) "Days till operation"
from PatientRecord p , Patient b, Appointment a, Operation o
where p.patient_ID = b.Patient_ID
and p.appointment_ID = a.appointment_ID
and p.operation_ID = o.OPeration_ID
order by Patient_Surname;

这就是我几个月来所拥有的,是否有类似的东西可以做几天?

3 个答案:

答案 0 :(得分:0)

首先,从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

在Oracle中,您只需减去日期:

Select Patient_FirstName ||' '|| Patient_surname as "Patient Name",
       appointment_date, Operation_date,
       trunc(Operation_Date - Appointment_Date) as "Days till operation"
from PatientRecord pr join
     Patient p
     on pr.patient_ID = p.Patient_ID join
     Appointment a
     on pr.appointment_ID = a.appointment_ID join
     Operation o
     on pr.operation_ID = o.Operation_ID
order by Patient_Surname;

答案 1 :(得分:0)

如果appointment_date2017-01-01 14:30:00operation_date2017-01-04 09:30:00,则差异为2天21小时,但您可能希望将其作为两者之间的差异进行比较2017-01-012017-01-04并显示为3天(而非2),所以:

Select Patient_FirstName ||' '|| Patient_surname AS "Patient Name",
       appointment_date,
       OPeration_date,
       TRUNC( Operation_Date ) - TRUNC ( Appointment_Date ) AS "Days till operation"
from   PatientRecord p
       INNER JOIN Patient b
       ON ( p.patient_ID = b.Patient_ID )
       INNER JOIN Appointment a
       ON ( p.appointment_ID = a.appointment_ID )
       INNER JOIN Operation o
       ON ( p.operation_ID = o.OPeration_ID )
order by Patient_Surname;

你也可以使用:

CEIL( Operation_Date - Appointment_Date ) AS "Days till operation"

答案 2 :(得分:-3)

试试这个:

Select DateDiff(d,Appointment_Date,Operation_Date) as [Days till operation]