我正在尝试计算我的数据库中的所有预订,客人预订时间超过一定时间。到达日期和出发日期在预订表中。我正在使用oracle在sqlplus中工作,并且错误无效标识 datediff 弹出。这是我的尝试。我还希望能够显示每个预订alog与打印的日期差异。
SELECT b.BOOKINGID, g.FORENAME, g.SURNAME
FROM GUEST g, BOOKING b
WHERE g.GUESTID = b.GUESTID AND
DATEDIFF(day, b.DEPARTDATE, b.ARRIVEDATE) > 2;
答案 0 :(得分:4)
尝试Oracle等效项:
SELECT b.BOOKINGID, g.FORENAME, g.SURNAME
FROM GUEST g join
BOOKING b
on g.GUESTID = b.GUESTID
where (b.DEPARTDATE - b.ARRIVEDATE) > 2;
我还将查询更改为使用ANSI连接语法。
注意:这假定日期没有时间戳。如果是这样,您可能需要:
where trunc(b.departdate) - trunc(b.arrivedate) > 2
获得夜晚。
答案 1 :(得分:2)
在ORACLE中DATEDIFF
不存在
但在Oracle中,您可以在两个日期之间直接使用 + 或 - 操作数。
所以你的requets可能是:(编辑在select中添加diff值)
SELECT b.BOOKINGID, g.FORENAME, g.SURNAME,
CASE WHEN (SYSDATE - b.DEPARTDATE) > 0 THEN CONCAT((SYSDATE - b.DEPARTDATE), ' days late')
ELSE CONCAT((b.DEPARTDATE - SYSDATE),' days left')
END AS "Booking Status"
FROM GUEST g, BOOKING b
WHERE g.GUESTID = b.GUESTID
AND (SYSDATE - b.DEPARTDATE) > 2;
此查询仅显示至少2天的预订。
修改强>
您正在寻找的查询是:(几乎与Gordon Linoff的查询相同)
SELECT b.BOOKINGID, g.FORENAME, g.SURNAME, (b.DEPARTDATE - b.ARRIVEDATE) as booking_duration
FROM GUEST g, BOOKING b
WHERE g.GUESTID = b.GUESTID
AND (b.DEPARTDATE - b.ARRIVEDATE) > 2;