Sql 查询以查找日期不为';t重叠

Sql 查询以查找日期不为';t重叠,sql,vba,ms-access,ms-access-2013,Sql,Vba,Ms Access,Ms Access 2013,有人能帮我创建一个查询,它将填充尚未预订的DJ列表 我的用户将选择开始日期(和时间)和结束日期(和时间),然后单击按钮选择DJ 我只希望那些在这些时段之间可用的DJ出现在列表中 下面是涉及的两张表 列表框中我只需要DJ号码和DJ姓名 到目前为止我有这个。。。但它不起作用: SELECT tblDJ.DJ_No AS [DJ ID], tblDJ.DJ_Name AS Name FROM tblDJ WHERE (((tblDJ.[DJ_No]) Not In (SELECT tblBooki

有人能帮我创建一个查询,它将填充尚未预订的DJ列表

我的用户将选择开始日期(和时间)和结束日期(和时间),然后单击按钮选择DJ

我只希望那些在这些时段之间可用的DJ出现在列表中

下面是涉及的两张表

列表框中我只需要DJ号码和DJ姓名

到目前为止我有这个。。。但它不起作用:

SELECT tblDJ.DJ_No AS [DJ ID], tblDJ.DJ_Name AS Name FROM tblDJ
WHERE (((tblDJ.[DJ_No]) Not In
(SELECT tblBooking.[FK_DJ_No]
FROM tblBooking
WHERE ( (tblBooking.End_Date) >= 01-04-2020 19:30:00 )))) ....etc....
我现在只是在这里输入一个日期,但很明显,一旦实现,它将存储在一个变量中


感谢

SQL中的日期需要包装在两个
#
之间,以便MS Access将其识别为日期:

select *
from tblDJ
where DJ_No not in
    (
    select FK_DJ_No 
    from tblBooking 
    where End_Date >= #2020-04-01 19:30:00#
    )

除此之外,您可以进行查询。

SQL中的日期需要在两个
#
之间进行包装,以便MS Access将其识别为日期:

select *
from tblDJ
where DJ_No not in
    (
    select FK_DJ_No 
    from tblBooking 
    where End_Date >= #2020-04-01 19:30:00#
    )

除此之外,您的查询将起作用。

实现两个间隔的重叠将如下所示:

1st_start_date <= 2nd_end_date and 1st_end_date >= 2nd_start_date
您只需要用您的值替换
#开始日期#
#结束日期#

这是可行的,因为存在以下假设:

  • 第一个事件的开始日期早于该事件的结束日期
  • 第二个事件的开始日期早于该事件的结束日期

  • 这似乎是合乎逻辑的,对吗?

    实现两个间隔的重叠将如下所示:

    1st_start_date <= 2nd_end_date and 1st_end_date >= 2nd_start_date
    
    您只需要用您的值替换
    #开始日期#
    #结束日期#

    这是可行的,因为存在以下假设:

  • 第一个事件的开始日期早于该事件的结束日期
  • 第二个事件的开始日期早于该事件的结束日期

  • 这似乎合乎逻辑,对吗?

    嗨。这就是我到目前为止所有的SQL代码。减去“……等……”。。。。。。如果我运行它,我会得到“查询表达式中的语法错误”(如果我删除时间(19:30:00),它似乎会停止)…我希望它不包括DJ D00057,因为他们有一个预订,其结束日期晚于2020年4月1日,但这与我输入的日期没有任何区别。对不起,我的含糊不清。这是我到目前为止所有的SQL代码。减去“…等…如果我运行它,我会在查询表达式中得到”语法错误“(如果我取消时间(19:30:00),它似乎会停止)…我希望它不包括DJ D00057,因为他们有一个预订,其结束日期晚于2020年4月1日,但我输入的日期没有任何区别。抱歉我的含糊不清谢谢-这是我迄今为止最接近的事情-但是,我不能同意这些假设。-假设从2001/01开始,DJ 1号有预订/01 20:00和2001/01/02结束时的01:00-如果有人试图从2001/01/01-19:00和2001/01/01结束时的23:30开始预订,我需要它不显示DJ 1号可用。我如何实现这一点?如果有一种方式可以在活动结束后开始,则数据验证中存在一些严重问题。否-我必须验证p请注意——但有人可以预订一个新的活动,它的开始日期比现有的预订日期晚(即使只有几分钟)——但仍然重叠(如果你明白我的意思的话?)但是上面的代码似乎允许这种情况发生?不,不允许。您要预订的活动开始日期必须早于现有预订的结束日期,因此这将取消预订。谢谢-这是我迄今为止最接近的事情-但是,我不能同意这些假设。-假设从2001/01/01 20:00开始预订dj 1号d在2001/01/02年1:00结束-如果有人试图从2001/01/01-19:00到2001/01/01 23:30结束预订,我需要它不显示DJ 1号可用。我如何实现这一点?如果有一种方法可以让活动在结束后开始,则数据验证中存在一些严重问题。不-我有验证来防止这种情况发生-但有人可以预订一个新的活动,它的开始日期比现有的预订日期晚(即使只有几分钟)-但仍然重叠-(如果你明白我的意思吗?)但是上面的代码似乎允许这种情况发生?不,不允许。您要预订的活动开始日期必须早于现有预订的结束日期,因此这将使预订无效。