V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Kylinsun
V2EX  ›  问与答

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

  •  
  •   Kylinsun · 2020-05-21 16:40:27 +08:00 · 1105 次点击
    这是一个创建于 1658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景:表字段中存在 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 层上做过滤,不知道有没有更好的方法
    9 条回复    2020-05-21 18:01:16 +08:00
    opengps
        1
    opengps  
       2020-05-21 16:52:59 +08:00
    用 or 条件就行呗?
    开始时间早于指定时间 or 结束时间晚于指定时间
    Kylinsun
        2
    Kylinsun  
    OP
       2020-05-21 17:17:32 +08:00
    @opengps 有想过 or,当我传 start_date=2020-05-10,end_date=2020-05-20 这时候是不应该搜出这条记录的,用 OR 就不行。
    kanezeng
        3
    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
        4
    kanezeng  
       2020-05-21 17:27:21 +08:00
    哦,后面的 start_date 不同
    fighterlyt
        5
    fighterlyt  
       2020-05-21 17:30:06 +08:00
    这不是数据库的问题,这是整个逻辑不清的问题,这里很明显,如果记录的时间段和传入的时间段有交叉,那就返回, 应该是 start_date<=结束时间 and end_date>=开始时间
    fighterlyt
        6
    fighterlyt  
       2020-05-21 17:31:55 +08:00
    给定一个时间段,所有未交叉的只有两种
    1. 未开始 start_date> 结束时间
    2. 已结束 end_data<开始时间

    那么符合要求的,按照结合律,那么是 or 变 and, 条件相反
    kanezeng
        7
    kanezeng  
       2020-05-21 17:32:30 +08:00
    结束时间晚于指定开始时间 And 开始时间早于指定结束时间 ?
    fighterlyt
        8
    fighterlyt  
       2020-05-21 17:51:59 +08:00
    分析过程都给出来了 @kanezeng @Kylinsun @opengps
    Kylinsun
        9
    Kylinsun  
    OP
       2020-05-21 18:01:16 +08:00
    可能我描述的不够清晰,时间的交集、并集都需要把结果查询出来。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5795 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:42 · PVG 09:42 · LAX 17:42 · JFK 20:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.