java - 如何在存在多个日期值的同个字段进行sql查询出特定日期范围的数据?

 

问题描述:

字段realStartTime的值可能取值类似:2022-09-14 11:38:21,2022-09-14 18:00:00,即是存在逗号分割的多个时间。
我想实现的是通过传入一个时间范围,如果realStartTime分割后的某个时间在此范围内,即可以查询出来,如果realStartTime有多个符合,则最终输出一条结果。

只支持realStartTime取值只有一个时间的写法(mybatis):

<select id="getEventPlanByCodeDateLimitSimple" resultMap="EventPlanRecordAllMap">
select
    epr.*
from
    event_plan_record epr
where
    epr.realStartTime BETWEEN #{startDate} AND #{endDate} order by epr.realStartTime desc limit #{page},#{count};
</select>

 

第 1 个答案:

只有把realStartTime分割开来,然后判定所有可能想交的情况:

select
    epr.*
from
    event_plan_record epr
where
    substring_index('epr.realStartTime', ',', 1) BETWEEN #{startDate} AND #{endDate} 
    or substring_index('epr.realStartTime', ',', -1) BETWEEN #{startDate} AND #{endDate}
    or #{startDate} BETWEEN substring_index('epr.realStartTime', ',', 1) AND substring_index('epr.realStartTime', ',', -1)
    or #{endDate} BETWEEN substring_index('epr.realStartTime', ',', 1) AND substring_index('epr.realStartTime', ',', -1)
order by epr.realStartTime desc limit #{page},#{count};

希望能帮助到你。


源码分析 - vue3 源码 isPromise 为什么不用 toRawType实现?:vue3 源码 isPromise 为什么不用 toRawType实现export const isFunction = (val: unknown): ...