我试图在 18:00:00 时间获得昨天的日期。
我试过这个:
DECLARE @YesturdayDate datetime = DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()-1));
select dateadd(h,18,@YesturdayDate)
但是运行 select 语句时出现错误:
"必须声明标量变量 "@YesturdayDate"。"
这是为什么?
谢谢。
您使用的是什么版本的 sql-server?我假设是 2005 年,那么您不能在声明它的同一行中初始化变量。
DECLARE @YesturdayDate datetime;
SET @YesturdayDate = DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()-1));
select dateadd(hh,18,@YesturdayDate);
(你也必须使用dateadd(hh...
代替dateadd(h...
)
你可以用一个DATEADD
/DATEDIFF
对来做到这一点:
DATEADD(day,DATEDIFF(day,'20010102',GETDATE()),'2001-01-01T18:00:00')
这利用了两个恒定日期时间值之间的关系。它是“将 2001 年 1 月 2 日到现在的总天数加到 2001 年 1 月 1 日的 18:00”。这与“昨天给我 18:00”相同。
至于您报告的原始错误 - 如果它是唯一GO
发生的错误,我唯一能想到的是您的两个语句实际上是分开的批次(通过命令彼此分开)