我正在处理(对我来说)巨大的SQL问题。我有一个名为“timeshifts”的表,其中有4列: id,name,from和to。最后两种类型是TIME。
现在:我有三个时移: 06:00至14:00 14:00 - 22:00 22:00 - 06:00
现在,我必须找到当前时间的正确移位(它像魅力一样),但我找不到属于当前移位的正确记录。 IE浏览器。名为user_times的表包含具有单独日期和时间值的字段。根据目前的时间转换,我必须找到属于时移的记录。前两班没有问题,但第三班经过午夜,这是我的问题。
以下是查找正确的班次,午夜事件的查询:
SELECT
FLOOR(SUM(time_sum) / 60) AS th,
MOD(SUM(time_sum), 60) AS tm,
t.*
FROM
ur_user_times ut,
ur_timeshifts t
WHERE CURTIME() >= IF (
t.timeshift_to < t.timeshift_from,
0,
ADDTIME(t.timeshift_from, "00:15")
)
AND CURTIME() <= ADDTIME(
IF (
t.timeshift_to < t.timeshift_from,
ADDTIME(t.timeshift_from, "10:00:00"),
t.timeshift_to
),
"00:15"
)
AND ut.`date` BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()
AND ut.`start` BETWEEN ADDTIME(t.`timeshift_from`, "-10:00:00") AND ADDTIME(t.`timeshift_to`, "-10:00:00")
AND ut.user_id = 40
ut.start是我们感兴趣的时间价值。
答案 0 :(得分:2)
试试这个:
select *
from timeshifts ts,
usertimes ut
where
(ts.from < ts.to and ut.start >= ts.from and ut.start <= ts.to) OR
(ts.from > ts.to and (ut.start >= ts.from or ut.start <= ts.to))
答案 1 :(得分:1)