我有一个名为TimeLog的列
我希望在包含空日期值的日期范围内获取一天中的最小和最大时间。请注意,这是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)
"
答案 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 & "')