获取日期中的最小和最大时间,并在MS Access中的单个列中包含空日期

时间:2017-07-14 03:51:43

标签: sql ms-access oledb

我有一个名为TimeLog的列

enter image description here

我希望在包含空日期值的日期范围内获取一天中的最小和最大时间。请注意,这是Oledb / MS Access。

到目前为止,这是我的问题:

commstring = "
    SELECT FORMAT([LogTime],'MM/dd/yyyy')  AS LTime, MIN(LogTime) AS MinTime, MAX(LogTime) AS MaxTime 
    FROM TimeLog 
    WHERE (#" & fromdate & "# <= LogTime OR LogTime IS NULL) 
        AND (#" & todate & "# >= LogTime OR LogTime IS NULL) 
        AND UserID = '" & NumCmbBox.Text & "' 
    GROUP BY FORMAT([LogTime],'MM/dd/yyyy') 
    ORDER BY MAX(TimeLog.LogTime)
"

1 个答案:

答案 0 :(得分:0)

用Nz尝试这个老技巧:

WHERE (#" & Format(fromdate, "yyyy\/mm\/dd") & "# <= Nz(LogTime, Now())) 
    AND (#" & Format(todate, "yyyy\/mm\/dd") & "# >= Nz(LogTime, Now())) 
    AND UserID = '" & NumCmbBox.Text & "' 

或没有:

WHERE ((#" & Format(fromdate, "yyyy\/mm\/dd") & "# <= IIf(LogTime Is Null, Now(), LogTime)  
        AND #" & Format(todate, "yyyy\/mm\/dd") & "# >= IIf(LogTime Is Null, Now(), LogTime)) 
        OR LogTime Is Null)
    AND UserID = '" & NumCmbBox.Text & "'

或使用之间 - 和(测试并在这里工作):

WHERE ((LogTime BETWEEN #" & Format(fromdate, "yyyy\/mm\/dd") & "# AND #" & Format(todate, "yyyy\/mm\/dd") & "#) OR (LogTime Is Null))
    AND (UserID = '" & NumCmbBox.Text & "')

您也可以尝试:

WHERE ((Nz(LogTime, Date()) BETWEEN #" & Format(fromdate, "yyyy\/mm\/dd") & "# AND #" & Format(todate, "yyyy\/mm\/dd") & "#) OR (LogTime Is Null))
    AND (UserID = '" & Me!NumCmbBox.Value & "')