请问跨天sql语句怎么查询?

jok886 2008-11-19 06:48:57
表mtime
字段
id starttime endtime
001 22:00 09:00
002 09:30 12:30
003 13:00 17:00
004 17:30 21:30
查询当前时间属于那个时段 比如现在 19:00 应该是 004
可是第一条是跨天的 如果是08:00 查询不出来
select * from mtime
where CONVERT(varchar(12) , getdate(), 108 ) between starttime and endtime

这个应该怎么查询呢?
...全文
479 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weini868311928 2008-11-21
  • 打赏
  • 举报
回复
如果是跨两天呢?一定是跨一天的嘛?建议还是修改数据表结构将完整日期时间一齐存。
一条晚起的虫 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zaodt 的回复:]
我认为,需要修改表结构。
不要只存储时间,应该加上日期,如:
Start: 2008/11/19 22:35
End: 2008/11/20 7:20
这样就很好处理了。

我只是举个例子,具体看情况,很多问题都可以通过表单设计来解决。
[/Quote]

//我估计lz的代码有点像考勤排班之类的东西,这个表中存的是一个规则,不可能有具体日期的。
jok886 2008-11-20
  • 打赏
  • 举报
回复
select * from mtime
where 1=
case when starttime<endtime

then (case when convert(varchar(5),getdate(),8) between starttime and endtime then 1 else 0 end)

else (case when convert(varchar(5),getdate(),8) >= starttime or convert(varchar(5),getdate(),8)<=endtime then 1 else 0 end) end
zaodt 2008-11-20
  • 打赏
  • 举报
回复
我认为,需要修改表结构。



不要只存储时间,应该加上日期,如:


Start: 2008/11/19 22:35

End: 2008/11/20 7:20


这样就很好处理了。



我只是举个例子,具体看情况,很多问题都可以通过表单设计来解决。
shakaqrj 2008-11-20
  • 打赏
  • 举报
回复
更直接点
修改表数据
将22:00 09:00 拆成两部分
如果可以的话,这样最快,而且表达更清楚
ma_helly 2008-11-20
  • 打赏
  • 举报
回复
我觉得还是加上0:00比较好,这样改动一点可以省下很多的事情
一条晚起的虫 2008-11-20
  • 打赏
  • 举报
回复
SELECT *
FROM mtime
WHERE (1 = CASE WHEN starttime < endtime THEN (CASE WHEN CONVERT(varchar(5),
getdate(), 8) BETWEEN starttime AND endtime THEN 1 ELSE 0 END)
ELSE (CASE WHEN CONVERT(varchar(5), getdate(), 8) >= starttime OR
CONVERT(varchar(5), getdate(), 8) <= endtime THEN 1 ELSE 0 END) END)
一条晚起的虫 2008-11-20
  • 打赏
  • 举报
回复
SELECT *
FROM mtime
WHERE (1 = CASE WHEN starttime < endtime THEN (CASE WHEN CONVERT(varchar(5),
getdate(), 8) BETWEEN starttime AND endtime THEN 1 ELSE 0 END)
ELSE (CASE WHEN CONVERT(varchar(5), getdate(), 8) >= starttime OR
CONVERT(varchar(5), getdate(), 8) <= endtime THEN 1 ELSE 0 END) END)
jok886 2008-11-19
  • 打赏
  • 举报
回复
看了看这样好像可以的

select * from mtime
where 1=
case when starttime<endtime

then (case when convert(varchar(5),getdate(),8) between starttime and endtime then 1 else 0 end)

else (case when convert(varchar(5),getdate(),8) >= starttime or convert(varchar(5),getdate(),8)<=endtime then 1 else 0 end) end
qap22 2008-11-19
  • 打赏
  • 举报
回复
帮顶

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧