我对此问题的初步答案是编写脚本 . 我没有使用SQL,而是使用了Python并对它们进行了规范化 . 我很好奇是否有人可以使用SQL提出解决方案 .
如果日期发生在营业时间之外,我希望将日期标准化为下一个工作日 . 我会保持这个非常简单,并说工作时间是星期一到星期五上午9点到下午6点 . 超出工作时间的任何事情都是在营业时间之外 .
日期应该发生的变化是星期六下午2点变为星期一早上9点(商业周的第一个合法时间) . 周三晚上7点到周四早上9点 . 我们忽略假期 . 等等 .
样本数据:
mysql> select mydate from mytable ORDER by mydate;
+---------------------+
| mydate |
+---------------------+
| 2009-09-13 17:03:09 |
| 2009-09-14 09:45:49 |
| 2009-09-15 09:57:28 |
| 2009-09-16 21:55:01 |
+---------------------+
4 rows in set (0.00 sec)
第一个日期是星期日,所以它应该标准化为2009-09-14 09:00:00
第二次约会很好,周一是上午9点 .
第三次约会很好,周二上午9点 .
第四个日期是星期三晚上9点(在我们的上午9点到下午6点工作时间之外),应该在周四上午9点转换到上午9点 .
3 回答
我认为你的Python解决方案会更好......但我喜欢挑战:)
在MySQL上测试过
不确定为什么要这样做,但如果需要始终对数据库中的所有数据都这样,则需要一个触发器 . 我会设置一个表格来指定营业时间,您可以使用该表格来确定下一个有效的营业时间日期和时间 . (我甚至可以考虑制作一张 table ,告诉你下一个工作日和小时的具体情况,不是这个变化很大,如果你改变明年的假期,或者如果你改变一年的假期,可能需要每年更新一次 . 你改变整个营业时间 . 通过预先计算,你可以节省处理这个的时间 . )我也会想要使用你的脚本,因为最好在输入之前修复数据,但你需要触发器来确保来自任何源的数据(迟早会有来自应用程序以外的源的更改)满足数据诚信规则 .
我不认为你可以在一个查询中做到这一点,但你可以试试这个: