MS Access查询时间字段,确定时间是否在范围

时间:2016-11-16 02:15:37

标签: sql-server ms-access ms-office

在Access中构建一个简单的查询并遇到问题。

如果标准介于#8:00:00 PM#和#1:00:00 AM#我预计只会评估5个小时,但这不会发生。它返回上午8:00(上午9:00)发生的值,依此类推。

我只想将结果在一段时间内持续1天,我意识到这一天在00:00发生变化:但有几次工作日这段时间超过了午夜时间线。< / p>

我意识到表达式可能完全符合预期,但不知道如何输入符合我需要的表达式。

The SQL is: SELECT HealthVault2.Time, HealthVault2.Date_Time
FROM HealthVault2
WHERE (((HealthVault2.Time) Between #12/30/1899 20:0:0# And #12/30/1899 1:0:0#));

我不知道12/30/1899来自哪里,该字段只有一段时间(当我点击F2,或点击字段时,没有日期时间值)

我确信我忽视了一些简单的事情。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这将是这样的:

SELECT 
    HealthVault2.Time, HealthVault2.Date_Time
FROM 
    HealthVault2
WHERE 
    TimeValue(HealthVault2.Time) Between #00:00:00# And #20:00:00#;

20:00至01:00(次日):

WHERE 
    TimeValue(HealthVault2.Time) >= #20:00:00#
    OR
    TimeValue(HealthVault2.Time) <= #01:00:00#;

对于StartTime到EndTime(可能是第二天):

PARAMETERS
    StartTime DateTime, EndTime DateTime;
SELECT 
    HealthVault2.Time, HealthVault2.Date_Time
FROM 
    HealthVault2
WHERE IIF(StartTime <= EndTime,
    TimeValue(HealthVault2.Time) >= StartTime
    AND
    TimeValue(HealthVault2.Time) <= EndTime,
    TimeValue(HealthVault2.Time) >= StartTime
    OR
    TimeValue(HealthVault2.Time) <= EndTime);

- or simplified:

WHERE 
    (StartTime <= EndTime)
    XOR
    (TimeValue(HealthVault2.Time) >= StartTime
    AND
    TimeValue(HealthVault2.Time) <= EndTime);