请教一个数据表时间查询问题?

2020-05-21 16:40:27 +08:00
 Kylinsun
场景:表字段中存在 start_date,end_date 两个字段,当客户端传 start_date 和 end_date 到接口时需要查询出相应得记录。
问题:当表里面存在 start_date=2020-04-27,end_date=2020-05-09 这条记录时,客户端传入 start_date=2020-05-01,end_date=2020-05-20 时,这条记录需要被查出来,可以再数据库层面上解决这个问题吗?
现在的做法:再 service 层上做过滤,不知道有没有更好的方法
959 次点击
所在节点    问与答
9 条回复
opengps
2020-05-21 16:52:59 +08:00
用 or 条件就行呗?
开始时间早于指定时间 or 结束时间晚于指定时间
Kylinsun
2020-05-21 17:17:32 +08:00
@opengps 有想过 or,当我传 start_date=2020-05-10,end_date=2020-05-20 这时候是不应该搜出这条记录的,用 OR 就不行。
kanezeng
2020-05-21 17:26:53 +08:00
没看懂,
正文说:“客户端传入 start_date=2020-05-01,end_date=2020-05-20 时,这条记录需要被查出来”
二楼说:“我传 start_date=2020-05-10,end_date=2020-05-20 这时候是不应该搜出这条记录的”
所以是需要查出来还是不需要查出来?
kanezeng
2020-05-21 17:27:21 +08:00
哦,后面的 start_date 不同
fighterlyt
2020-05-21 17:30:06 +08:00
这不是数据库的问题,这是整个逻辑不清的问题,这里很明显,如果记录的时间段和传入的时间段有交叉,那就返回, 应该是 start_date<=结束时间 and end_date>=开始时间
fighterlyt
2020-05-21 17:31:55 +08:00
给定一个时间段,所有未交叉的只有两种
1. 未开始 start_date> 结束时间
2. 已结束 end_data<开始时间

那么符合要求的,按照结合律,那么是 or 变 and, 条件相反
kanezeng
2020-05-21 17:32:30 +08:00
结束时间晚于指定开始时间 And 开始时间早于指定结束时间 ?
fighterlyt
2020-05-21 17:51:59 +08:00
分析过程都给出来了 @kanezeng @Kylinsun @opengps
Kylinsun
2020-05-21 18:01:16 +08:00
可能我描述的不够清晰,时间的交集、并集都需要把结果查询出来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/674062

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX