我正在尝试在 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
命令彼此分隔)