首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL处理午夜

SQL处理午夜
EN

Stack Overflow用户
提问于 2012-10-05 17:22:59
回答 2查看 543关注 0票数 1

我正在处理(对我来说)巨大的SQL问题。我有一个名为"timeshifts“的表,它有4列: id,name,from和to。最后两种类型是时间。

现在:我有三个时间转换: 06:00 - 14:00 14:00 - 22:00 22:00 - 06:00

现在,我必须为当前时间找到正确的移位(这就像一个咒语),但我找不到属于当前移位的正确记录。即。名为user_times的表包含日期和时间值不同的字段。根据当前的时移,我必须找到属于时移的记录。前两个班没有问题,但第三个班过了午夜,这就是我的问题。

下面的查询可以找到正确的班次,事件持续到午夜:

代码语言:javascript
复制
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是我们感兴趣的时间价值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 17:38:36

试试这个:

代码语言:javascript
复制
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))
票数 2
EN

Stack Overflow用户

发布于 2012-10-05 17:38:54

几天前也发布了一个类似的查询:

请参阅此问题:

Shift wise datetime checking in sql server query

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12743280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档