在 MS Access 中获取两个时间值之间的记录

Posted

技术标签:

【中文标题】在 MS Access 中获取两个时间值之间的记录【英文标题】:Get records between two time values in MS Acess 【发布时间】:2014-04-03 04:48:46 【问题描述】:

我有一个日期时间字段。我想获取上午 9 点到下午 5 点之间的记录,我还需要下午 5 点到 9 点之间的记录。如果我使用 between 运算符,它会给我相同数量的记录。

SELECT count(*)
FROM DirectLineMainCallQuery AS CallTbl
Where  Format(CallTbl.CallDate,"dddd") <> 'Saturday' AND Format(CallTbl.CallDate,"dddd") <> 'Sunday'
AND (Format(CallTbl.StartTime,'hh:mm') Between '09:00' AND '17:00')
UNION ALL
SELECT count(*)
FROM DirectLineMainCallQuery AS CallTbl
Where  Format(CallTbl.CallDate,"dddd") <> 'Saturday' AND Format(CallTbl.CallDate,"dddd") <> 'Sunday'
AND  (Format(CallTbl.StartTime,'hh:mm') Between '17:00' AND '09:00') ;

任何帮助将不胜感激。

谢谢

【问题讨论】:

但是,您确定输出中的记录数应该不同吗?因为有可能发生相同的没有。与每个查询匹配的记录数。 应该不一样,但我得到的是相同的记录。 您能分享一下您的表架构和值吗? 对于第二个条件,您不能将 xx 放在 17 和 05 之间,它将返回 0 条记录,因为您想在今天下午 5 点和第二天早上 9 点之间获取记录。 我不能分享它的机密数据。我得到了两个日期之间的记录。现在我需要进一步把它分解成时间。 【参考方案1】:

AK47 有正确的注释,需要两个时间范围,第二个是 1700 到午夜,或 0000 到 0900,如下所示 - 请注意包含最后两个中间的额外一对括号...

   SELECT Count(*)
    FROM   directlinemaincallquery AS CallTbl
    WHERE  Format(CallTbl.calldate, "dddd") <> 'Saturday'
       AND Format(CallTbl.calldate, "dddd") <> 'Sunday'
     AND ( Format(CallTbl.starttime, 'hh:mm') BETWEEN '09:00' AND '17:00' )

    UNION ALL

    SELECT Count(*)
    FROM   directlinemaincallquery AS CallTbl
    WHERE  Format(CallTbl.calldate, "dddd") <> 'Saturday'
       AND Format(CallTbl.calldate, "dddd") <> 'Sunday'
    AND (( Format(CallTbl.starttime, 'hh:mm') BETWEEN '17:00' AND '23:59' )  
      OR ( Format(CallTbl.starttime, 'hh:mm') BETWEEN '00:00' AND '09:00' )); 

4/6 晚编辑

你说 -- 如果我使用 between 运算符,它会给我相同数量的记录

而且 MSACCESS 同意你的看法...... 9 到 17 之间与 17 到 9 之间是一样的

我创建了这个测试,得到了这个结果----

SELECT table1.*
FROM table1
Where Frame between '8' and '3'

Frame
3
4
5
6
7
8

MSACCESS 不在乎“较大”在“较小”之前,而是在两个值中的较小和较大之间为您提供。虽然您可能认为它应该“按我的意思行事”,但它不能。要求它的方法是为 17--thru--2359 和 0000 到 0900 创建两个之间,如我的示例所示,或者使用更大/更少的符号 (>=

【讨论】:

你能解释一下你的答案吗?我只需要在上午 9 点之前存在什么日期记录并不重要,所以我认为它应该在 17:00 和 9:00 之间提供记录。我只是检查 where 子句中的时间。【参考方案2】:

请尝试以下代码,

SELECT count(*)
FROM DirectLineMainCallQuery AS CallTbl
Where  Format(CallTbl.CallDate,"dddd") <> 'Saturday' AND Format(CallTbl.CallDate,"dddd") <> 'Sunday'
AND (Format(CallTbl.StartTime,'hh:mm') >= '09:00' AND (CallTbl.StartTime,'hh:mm') < '17:00')
Union All
SELECT count(*)
FROM DirectLineMainCallQuery AS CallTbl
Where  Format(CallTbl.CallDate,"dddd") <> 'Saturday' AND Format(CallTbl.CallDate,"dddd") <> 'Sunday'
AND (Format(CallTbl.StartTime,'hh:mm') >= '17:00' AND (CallTbl.StartTime,'hh:mm') < '9:00')

【讨论】:

你的第二个查询只给出了 PM 的记录。

以上是关于在 MS Access 中获取两个时间值之间的记录的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:从子表单中删除记录时捕获值

MS Access 2007 - 选择多条记录并将值分配给字段

MS-Access 连接表在两个互斥列表之间插入/删除(2 个列表框)

Ms Access 比较两个记录集

MS Access - 打开一个带有新记录的表单并从以前的表单中插入一个值

如何批量检查 MS-Access 中的重复项并记录更改?