在 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 2007 - 选择多条记录并将值分配给字段
MS-Access 连接表在两个互斥列表之间插入/删除(2 个列表框)