gpt4 book ai didi

mysql - 检查 DAYOFWEEK() 是否存在于日期范围内

转载 作者:行者123 更新时间:2023-11-29 13:25:20 25 4
gpt4 key购买 nike

我有下表

Specialoffer
Id (int)
ValidFrom (date)
ValidTo (date)

SpecialOfferExcludedDays
Id (int) (ForeignKey with Table1.Id)
DayId (int)

Days
DayId (int) (ForeignKey with Table3.DayId)
Name (text)

特价包含

'1', '2013-01-01', '2013-01-14'

'2', '2013-02-01', '2013-02-05'

'3', '2013-11-21', '2013-11-25'

SpecialOfferExcludedDays 包含

'3', '4'

天数包含

'1', 'Sunday'
'2', 'Monday'
'3', 'Tuesday'
'4', 'Wednesday'
'5', 'Thursday'
'6', 'Friday'
'7', 'Saturday'

我正在尝试编写一个查询来实现以下目标;

  • 从 SpecialOffers 表中获取给定日期范围 ValidFrom 和 ValidTo 之间的所有 ID

  • 如果给定 ID 的 SpecialOfferExcludedDays 中存在某一天(例如星期二),则从 SpecialOffers 中排除任何记录。不限于1天。例如,可以排除周一和周六的 ID

我的查询目前看起来类似于以下内容,没有任何关于日期的逻辑

SELECT Id
FROM SpecialOffers
WHERE (ValidFrom > '2013-11-25'
AND ValidTo < '2013-11-30')

例如,我今天要预订 2013 年 12 月 1 日晚上的酒店预订。请为我提供 12 月 1 日有效的所有可能的特别优惠。考虑到以下任何特别优惠:某些日期无效

编辑

示例交易可能会获取 12 月 1 日至 12 月 25 日期间住宿的所有 ID(周五和周六除外)。

这可以做到吗?或者我最好在我的 C# 应用程序中编写此逻辑。

最佳答案

我想这就是您要找的。这将为您提供表 1 中满足日期和两个条件的所有行,但与表 3 中的星期二记录关联的任何行(通过 table2 多对多联接)除外。

SELECT Id
FROM Table1 t1
WHERE (ValidFrom > '2013-11-25'
AND ValidTo < '2013-11-30')
and not exists
(select 1 from table2 t2
inner join table3 t3 on t2.DayID=t3.dayID
where t1.ID=t2.ID and t3.Name='Tuesday')

关于是否用 C# 代替,如果不了解应用程序的结构和数据集的大小(以及其他项目),没有人可以为您回答。

编辑:这是我认为是您想要的更新版本的答案,知道任何一天都有哪些优惠:

DECLARE @dateIwanttocheck datetime='1/1/2013'
SELECT Id FROM Specialoffer t1
WHERE @dateIwanttocheck between ValidFrom and ValidTo
and not exists (select 1 from SpecialOfferExcludedDays t2
inner join Days t3 on t2.DayID=t3.dayID
where t1.ID=t2.ID and datepart(dw,@dateIwanttocheck)=t3.DayID)

关于mysql - 检查 DAYOFWEEK() 是否存在于日期范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20218441/

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