【发布时间】:2018-10-21 20:27:44
【问题描述】:
我有桌子 T1:
ID SCHEDULE
1 2018-05-12 14:00:00
我有桌子 T2
SCHEDULESTART SCHEDULEEND
09:00 17:00
我需要从 T1 表中进行 SELECT。
我想从 T1 中获取所有行,其中 SCHEDULE 字段中的 TIME 介于时间段(第二个表中的 START 和 END)之间。
我在一些 IBM 应用程序中工作,其中只能在第一个表 T1 的 WHERE 子句之后以 SQL 语句开头。
所以查询(很遗憾)必须始终以"SELECT * FROM T1 WHERE..." 开头
这无法更改(请记住这一点)。
这意味着我不能在 "FROM T1" 部分之后使用一些 JOIN 或 UNION ALL 语句,因为我只能在 WHERE 子句之后开始编写 SQL 查询。
对于这个例子,可以有这样的语句:
select TIME(SCHEDULE) from T1
where TIME(SCHEDULE)>=(SELECT SCHEDULESTART FROM T2 )
AND TIME(SCHEDULE)<=(SELECT SCHEDULEEND FROM T2)
它会返回正确的结果。
但是,
例如,如果 SCHEDULE 是 2018-05-12 23:00:00 和 SCHEDULESTART is 22:00:00 和 SCHEDULEEND is 03:00:00,则此查询将不起作用(这是合乎逻辑的,因为时间是在夜间和从第一天切换到第二天的时间段内)!
T2表中可以计算的最大时间段为24小时时间段(仅1天)。
应该如何准确地定义 SQL 查询以涵盖所有情况? 谢谢,
【问题讨论】:
标签: sql datetime select time db2