加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL查询假如匹配另一个表中的条目(譬喻沐日日期),则解除记录

发布时间:2020-12-31 17:41:05 所属栏目:编程 来源:网络整理
导读:我有两张桌子: Application applicationid (int) applicationname (varchar) isavailable (bit) 和 Holidays applicationid (int) holidaydate (datetime) 我必要获取任何给定应用措施名称的isavailable符号,但它应该只返回假如该日不是沐日. isavailable标

我有两张桌子:

Application
applicationid (int)
applicationname (varchar)
isavailable (bit)

Holidays
applicationid (int)
holidaydate (datetime)

我必要获取任何给定应用措施名称的isavailable符号,但它应该只返回假如该日不是沐日. isavailable符号与假期无关 – 仅在存在体系范畴题目时才配置,而不是在设定的时刻表上配置.

我最初有相同的对象:

select top 1 apps.isavailable
from dbo.Applications apps,dbo.Holidays hol
where apps.applicationid = hol.applicationid and
      apps.applicationname = @appname and
      ((datediff(dd,getdate(),hol.holidaydate)) != 0)

但纵然本日是假期,这也是回归记录,由于本日的其他沐日日期并不沟通.

我试过了

and (CONVERT(VARCHAR,101)) not in (CONVERT(VARCHAR,hol.holidaydate,101))

(它在SQL Server 2005上,以是没有Date范例以是我必需转换它)

但同样,纵然本日是假期,它也会返回记录.假如本日不是沐日,我怎样行使“not in”或“except”子句(或其他内容)来结构此查询,以仅返回记录?

更新

我不必要没有假期的全部应用措施名称列表 – 我必要指定apps.applicationname的记录.以下谜底仅返回本日没有假期的应用措施名称.假如查询不是沐日,则查询应返回isavailable符号,不然假如是沐日则不返回任何记录.我不体谅其他应用措施.

其它,假如我添加一个表格如下:

HoursOfOperations
applicationid (int)
mondayopen (datetime)
mondayclose (datetime)
tuesdayopen (datetime)
tuesdayclose (datetime)
//open and close for all seven days of the week

我是否可以插手全部这三个表格,只有在特定日期的小时内且不是假期时才返回记录?我是否必需在单独的查询中执行此操纵?

办理要领

以下查询应该为您提供一个没有为CURRENT日期界说假期的应用措施列表.
SELECT apps.ApplicationName,apps.isavailable 
FROM dbo.Applications apps
WHERE apps.ApplicationName = @AppName
    AND NOT EXISTS 
( SELECT * 
  FROM Holidays 
  WHERE ApplicationId = apps.ApplicationId
     AND CONVERT(VARCHAR,101) = CONVERT(VARCHAR,holidaydate,101)
)

根基上我们所做的就是选择没有匹配的全部对象.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读