我正在使用类似于此链接上找到的SQL数据库架构 . Best way to store working hours and query it efficiently
我正在使用此基本架构存储位置的营业时间
-
商店 - INTEGER
-
DayOfWeek - INTEGER(0-6)
-
OpenTime - TIME
-
关闭时间 - 时间
然而,我想要做的是当前的DateTime(即今天)获得商店开放的NEXT(n)天数 . 因此,例如,如果我在接下来的三天发现该商店在营业时间开放和配置,商店在周日关闭,今天的日期是2015年2月21日( Saturday )我希望返回日期 (21/02/2015)Saturday, (23/02/2015)Monday and (23/02/2015)Tuesday .
如果它是 Sunday 我将返回 (23/02/2015)Monday, (24/02/2015)Tuesday and (25/02/2015)Wednesday (因为它在周日休息),最后如果是(2015年2月20日)星期五将返回 (20/02/2015)Friday, (21/02/2015)Saturday, (23/02/2015)Monday .
我不知道在SQL或C#中这样做是否更容易,但如果弄清楚如何计算,我会在精神上苦苦挣扎 .
任何指针,指导都会很棒 .
谢谢
5 回答
这将以相当有效的方式提前10天 . 第一个测试数据:
哪个可以像这样查询:
结果:
首先,您可以使用如下所示的简单查询来获取商店开放的一周中的日期
这假设没有未开放日期的条目 . 如果相反,打开小时列为空,或者小于或等于未打开的天数的关闭时间,则调整此查询 .
运行该查询并返回结果后,最好将它们转换为
List<DayOfWeek>
,您可以在代码中执行以下操作 .您可以使用
case
在本周提前一天看起来像下周的那一天 . 这是查看下一个开放日的示例:然后你可以递归以找到一天以上 . 如果我们将上述代码段存储在名为
get_next_open_day
的函数中,则递归公用表表达式可能如下所示:这是一个完整的工作示例:
多个商店的实施留给读者练习 .
试试这个:
输出:
PS:您可以将
GETDATE()
替换为任意日期 .我设法找到了解决方案:
在我看来,这是找到解决方案最简单的方法 . 谢谢你的帮助 .