MYSQL 查询查找紧邻的下一个日期时间

标签 mysql date datetime

我正在编写一个执行特定任务的迷你调度程序。 为了计算触发时间,我使用 MYSQL。我一直在编写一个查询。

查找大于给定先前时间的立即日期时间

并且

所需的立即日期时间的日期应该是给定日期中的任意日期

并且

所需的立即日期时间的时间(HH:MM:SS)部分应等于给定时间。

示例:

(一)

如果给定的日期是(“周一”、“周三”、“周六”),

给定时间为10:15:00,

给定的上一个时间是 2014-11-12 23:17:00

然后 MYSQL 应该返回 2014-11-15 10:15:00

(b)

给定日期:('SUN','SAT','TUES')

给定时间:09:10:00

给定的上一个时间是 2014-11-30 07:05:12

MYSQL 应返回2014-11-30 09:10:00

(c)

给定日期:(“周一”、“周四”、“周六”)

给定时间:11:00:00

给定的上一个时间是 2014-12-29 11:55:12

MYSQL 应返回2015-01-01 11:00:00

(d) 天数:(周日、周四、周六)'

给定的上一个时间是 2014-02-27 18:15:00

给定时间 15:15:00

MYSQL查询结果:2014-03-01 15:15:00

(e)

日期:(周二、周三、周五)

更新日期:2014-12-23 09:30:00

时间:08:00:00

预期结果:

2014-12-24 08:00:00

(f)

日期:周日、周二、周四

更新日期:2014-07-31 10:10:00

时间:06:07:08

预期分辨率: 2014-08-03 06:07:08

最佳答案

使用数字工作日数字,0=星期一,6=星期日:

set @day1=0;
set @day2=2;
set @day3=5;
set @time=time('10:15:00');
set @prevtime=timestamp('2014-11-12 23:17:00');

select if(weekday(@nexttime:=date_add(concat(date(@prevtime),' ',@time),interval if(@time>time(@prevtime),0,1) day)) in (@day1,@day2,@day3),@nexttime,if(weekday(@nexttime:=date_add(@nexttime,interval 1 day)) in (@day1,@day2,@day3),@nexttime,if(weekday(@nexttime:=date_add(@nexttime,interval 1 day)) in (@day1,@day2,@day3),@nexttime,if(weekday(@nexttime:=date_add(@nexttime,interval 1 day)) in (@day1,@day2,@day3),@nexttime,if(weekday(@nexttime:=date_add(@nexttime,interval 1 day)) in (@day1,@day2,@day3),@nexttime,if(weekday(@nexttime:=date_add(@nexttime,interval 1 day)) in (@day1,@day2,@day3),@nexttime,date_add(@nexttime,interval 1 day))))))) as nexttime;

如果您只有一个工作日,则可以将所有三个变量设置为相同的数字。

关于MYSQL 查询查找紧邻的下一个日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26893403/

相关文章:

mysql - 单个MySQL查询父子表值排序

ruby-on-rails - 为什么 Date.today - 6.months + 6.months != Date.today?

python - 如何将 datetime.datetime 转换为 GMT 格式 python?

excel - 绘制持续时间图表

jquery - 星期几和时刻 js

MySQL 查询关联星期几和发送消息的小时

php - 上传图片到服务器时打开流失败

mysql - 组合sql查询耗时太长

c++ - 使用 C++ 将多个值插入 mysql 数据库表时出现问题

java - Selenium 将工作日添加到日期,周末计算不正确