Getdate(),-1天

26

我不明白为什么,但某种原因这个查询不起作用。 我想取系统日期的前一天,其中sysdate比当前日期早1天。

WHERE
    a.SEND_Date >= dateadd(DD,-1,(CAST(getdate() as date) as datetime)) 

1
“doesn't work”是什么样子? - Matt Gibson
1
你实际上需要那里的 CAST 吗? - wilx
1
我不确定那个CAST是否必要。这就是为什么我需要帮助来改进或修复这条查询语句。 - N2hvits
我想也许这种方式更好: DATEADD(day,DATEDIFF(day,-1,GETDATE()),-1) - N2hvits
6个回答

41

CASE语句取决于你需要什么类型的日期。 如果你只需要比较日期,可以仅使用:

dateadd(DD, -1, cast(getdate() as date))

如果您需要比较日期和时间,可以使用以下方法:

dateadd(DD,-1,getdate())

这将给你一个日期时间,例如:2016-01-11 10:43:57.443


14
在T-SQL(sqlserver)中,你可以简单地执行以下操作:

getDate()-1

该函数按标准减去(天)。


这将是一个DATETIME值,包括小时和分钟,而不是仅有年/月/日的DATE值。 - Ross Presser

7

或者你可以不让这变得更加困难,尝试一下这个方法呢?

 CAST(GETDATE()-1 as date )

0

在我的版本中,已选答案仍有时间(00:00:00)。 要仅获取日期,请使用: 选择Convert(date,dateadd(day,-1,getdate()))

两者重量相同,均为0.001秒


0

只缺少一个CAST:

dateadd(DD,-1,(CAST(getdate() as date) as datetime))

两次使用 "as"(作为日期 + 作为日期时间),但只使用一次 "CAST" => 出现了问题 - 应该是:

dateadd(DD,-1,CAST(CAST(getdate() as date) as datetime))

0
请勿按照任何日期格式,因为在01/05/2020会打印成00/05/2020。所以请使用以下内容进行修复。
select CONVERT(varchar, DATEADD(DAY, -1, convert(Nvarchar, GETDATE(),112)),112)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接