Sql 如何计算日期之间的天数

Sql 如何计算日期之间的天数,sql,oracle,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

我现在正在做一个项目和我想要的输出,我需要计算预约和操作之间的天数,目前我有这个

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;
这就是我在四舍五入月份所做的,我在几天内也可以做类似的事情吗?

首先,在
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;
试试这个:

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

如果
预约日期
2017-01-01 14:30:00
操作日期
2017-01-04 09:30:00
,则差异为2天21小时,但您可能希望将其作为
2017-01-01
2017-01-04
之间的差异进行比较,并显示为3天(而不是2天)因此:

您还可以使用:

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

只需执行
Appointment\u Date-Operation\u Date
即可获得天数差异。Oracle没有
DATEDIFF
函数。对于from子句,trunc函数非常有效,当我执行连接语法时,它没有返回正确的数据,但我的原始代码返回了?
Patient p
应该是
Patient b
(连接条件需要修复)。此外,这并不考虑约会和操作何时有时间成分,例如,实际上是2天相隔21小时,但在日历上,这将是3天的差异。为什么不能使用“逗号”语法?版本9之前的Oracle不支持“加入”语法…@Mike。Oracle 9支持显式
JOIN
。Oracle 8没有。内部连接功能正常工作,再次感谢您的帮助:)
CEIL( Operation_Date - Appointment_Date ) AS "Days till operation"