[英]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.