就像标题所说,我正在尝试构建一个查询,从日期等于昨天日期的数据库表中选择所有记录。
表中的日期列的格式为datetime
(小时,分钟,秒),所以我根据日期年,月和日进行选择(时间无关紧要)只要日期是昨天。)
为实现这一目标,我构建了以下查询:
SELECT
*
FROM
qryTouchBoekingen
WHERE
(DATEPART(yyyy, myDateTime) = DATEADD(dd, -1, Datepart(dd, GetDate()))
AND (DATEPART(mm, myDateTime) = DATEADD(dd, -1, Datepart(mm, GetDate()))
AND (DATEPART(dd, myDateTime) = DATEADD(dd, -1, Datepart(dd, GetDate())) )
ORDER BY
Starttijd ASC
虽然这不会返回任何记录。当我仅在myDateTime
列的那一天使用它时,它可以工作(但显然也会返回该特定日期的所有其他年份和月份)。
我也无法使用:
SELECT
*
FROM
qryTouchBoekingen
WHERE
myDateTime = DATEADD(dd, -1, GetDate())
因为这会给time
带来错误。
答案 0 :(得分:3)
这个更简单的版本怎么样:
cast(myDateTime as date) = cast(dateadd(day, -1, getdate()) as date)
或者,甚至更好:
(myDateTime >= cast(dateadd(day, -1, getdate()) as date) and
myDateTime < cast(getdate() as date)
)
此版本更能明确利用索引。 (第一个也将利用myDateTime
上的索引,但这是函数排除使用索引的规则的例外。)
答案 1 :(得分:1)
试试这个。 您应该在从日期部分开始之前计算前一天
Select * from qryTouchBoekingen
WHERE ( DATEPART(yyyy, myDateTime) = Datepart(dd, DATEADD(dd, -1, GetDate()))
AND (DATEPART(mm, myDateTime) = Datepart(mm, DATEADD(dd, -1, GetDate()))
AND (DATEPART(dd, myDateTime) = Datepart(dd, DATEADD(dd, -1, GetDate())) )
Order by Starttijd ASC
答案 2 :(得分:0)
这是否有效:
Select
*
from
qryTouchBoekingen
WHERE
CAST( myDateTime AS DATE) = CAST(DATEADD(day, -1, GetDate()) AS DATE)
Order by
Starttijd ASC