【问题标题】:How to count the number of days between dates如何计算日期之间的天数
【发布时间】:2017-08-11 15:05:50
【问题描述】:

我目前正在做一个项目,我正在寻找输出,我需要计算预约和手术之间的天数,目前我有这个

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;

这就是我四舍五入的时间,我可以几天做类似的事情吗?

【问题讨论】:

标签: sql oracle


【解决方案1】:

首先,从不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;

【讨论】:

  • 非常感谢 trunc 函数的工作,关于 from 子句,当我执行连接语法时,它没有返回正确的数据,但我的原始代码返回了?
  • Patient p 应该是 Patient b (并且连接条件需要修复)。此外,这不考虑预约和操作何时具有时间成分,例如,实际上相隔 2 天 21 小时,但在日历上这将是 3 天的差异。
  • 为什么不能使用“逗号”语法? Oracle 9 之前的版本不支持 "join" 语法 ...
  • @Mike 。 . . Oracle 9 支持显式JOIN。 Oracle 8 没有。
【解决方案2】:

如果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"

【讨论】:

  • 内部连接功能有效,再次感谢帮助:)
【解决方案3】:

试试这个:

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

【讨论】:

  • Oracle 没有DATEDIFF 函数。
猜你喜欢
  • 2012-02-26
  • 2013-09-21
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2019-09-27
相关资源
最近更新 更多