选择日期等于今天日期减去1天的每个日期 - 在月/年不使用dateadd - T SQL

时间:2015-07-29 14:59:42

标签: sql sql-server date datetime

就像标题所说,我正在尝试构建一个查询,从日期等于昨天日期的数据库表中选择所有记录。

表中的日期列的格式为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带来错误。

3 个答案:

答案 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