繁体   English   中英

选择日期等于今天日期减去1天的每个日期-不适用于月份/年份的日期添加-T SQL

[英]Select every date where date is equal to today's date minus 1 day - Not working with dateadd on Month/year - T SQL

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

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

这个简单得多的版本怎么样:

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上的索引,但这是该函数禁止使用索引的规则的例外。)

试试这个。 您应该先计算前一天的时间

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

做这项工作:

Select 
    * 
from 
    qryTouchBoekingen 
WHERE 
    CAST( myDateTime AS DATE) = CAST(DATEADD(day, -1, GetDate()) AS DATE)
Order by 
    Starttijd ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM