gpt4 book ai didi

c# - 如何从 SQL 开放时间数据库查找接下来 (n) 个开放日

转载 作者:行者123 更新时间:2023-12-02 17:51:31 25 4
gpt4 key购买 nike

我正在使用与此链接中找到的类似的 SQL 数据库架构。 Best way to store working hours and query it efficiently

我正在使用此基本架构存储某个位置的营业时间

  • 商店 - 整数
  • DayOfWeek - 整数 (0-6)
  • 开放时间 - 时间
  • 关闭时间 - TIME

但是,我想做的是在当前日期时间(即今天)获取商店营业的下 (n) 天数。例如,如果我不想找到商店在接下来的三天内营业并在营业时间内配置的商店在星期日关闭,而今天的日期是 21/02/2015(星期六),我希望返回(2015年2月21日)星期六、(2015年2月23日)星期一和(2015年2月23日)星期二

如果是星期日,我会返回(2015年2月23日)星期一、(2015年2月24日)星期二和(2015年2月25日)星期三 (因为周日关闭)最后,如果是 (20/02/2015)周五,它将返回(20/02/2015)周五,(21/02/2015)周六,(23/02/2015 )星期一

我不知道这在 SQL 还是 C# 中是否更容易做到,但如果弄清楚如何计算它,我在精神上很挣扎。

任何指示、指导都会很棒。

谢谢

最佳答案

这将以相当有效的方式为您提前最多 10 天。第一个测试数据:

DECLARE @DaysAhead TABLE (
Delta INT
)
INSERT INTO @DaysAhead (Delta)
SELECT 0
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10

DECLARE @Opening TABLE (
Shop INT,
DayOfWk INT,
DayNm varchar(10),
OpenTime TIME,
CloseTime TIME
)

INSERT INTO @Opening (Shop, DayOfWk, DayNm, OpenTime, CloseTime)
SELECT 1, 5, 'Fri', '09:00', '17:00' --
UNION ALL SELECT 1, 6, 'Sat' ,'09:00', '17:00'
--UNION ALL SELECT 0, 'Sun', '09:00', '17:00' -- Not open on Sunday
UNION ALL SELECT 1, 1, 'Mon', '09:00', '17:00'
UNION ALL SELECT 1, 2, 'Tue', '09:00', '17:00'
UNION ALL SELECT 1, 3, 'Wed', '09:00', '17:00'

可以这样查询:

DECLARE @dt datetime='21-Feb-2015'
DECLARE @dow int=datepart(dw, @dt)-1

SELECT TOP 3 o.Shop, o.DayOfWk, o.DayNm, o.OpenTime, o.CloseTime FROM (
SELECT Delta, ((@dow+Delta)%7) as DayOfWk
FROM @DaysAhead
) daysAhead
INNER JOIN @Opening o on o.DayOfWk=daysAhead.DayOfWk
ORDER BY daysAhead.Delta

结果:

DECLARE @dt datetime='20-Feb-2015' -- Fri

1 5 Fri 09:00:00.0000000 17:00:00.0000000
1 6 Sat 09:00:00.0000000 17:00:00.0000000
1 1 Mon 09:00:00.0000000 17:00:00.0000000

DECLARE @dt datetime='21-Feb-2015' -- Sat

1 6 Sat 09:00:00.0000000 17:00:00.0000000
1 1 Mon 09:00:00.0000000 17:00:00.0000000
1 2 Tue 09:00:00.0000000 17:00:00.0000000

DECLARE @dt datetime='22-Feb-2015' -- Sun

1 1 Mon 09:00:00.0000000 17:00:00.0000000
1 2 Tue 09:00:00.0000000 17:00:00.0000000
1 3 Wed 09:00:00.0000000 17:00:00.0000000

关于c# - 如何从 SQL 开放时间数据库查找接下来 (n) 个开放日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28644943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com