Sql server SQL Server:“=”在大小写中出现语法错误
我正在做一个查询,我想要一个月的平均温度,但我有一个挑战。新年开始时,月份为1,我无法使用命令:Sql server SQL Server:“=”在大小写中出现语法错误,sql-server,syntax-error,case,Sql Server,Syntax Error,Case,我正在做一个查询,我想要一个月的平均温度,但我有一个挑战。新年开始时,月份为1,我无法使用命令: MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE())) 因为第1个月减去第1个月就是第0个月 因此,我想使用一个case表达式使我的代码工作 当我运行下面的代码时,我得到以下警告,这对我来说没有意义,因为当我测试它时,它工作了,而它不在这个查询中: Msg 102,15级,状态1,第8行 “=”附近的语法不正确 这是关于以下一行: TH
MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE()))
因为第1个月减去第1个月就是第0个月 因此,我想使用一个case表达式使我的代码工作 当我运行下面的代码时,我得到以下警告,这对我来说没有意义,因为当我测试它时,它工作了,而它不在这个查询中: Msg 102,15级,状态1,第8行 “=”附近的语法不正确 这是关于以下一行:
THEN MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, +11, GETDATE()))
看起来mssql不接受THEN后面的=语句。我在网上找不到它。有人能帮我吗
SELECT AVG(Value) AS AVG_temp
FROM(
SELECT Value, TimestampUTC
WHERE SourceName = 'Buitentemperatuur' and
CASE
WHEN MONTH(TimestampUTC) = 1
THEN MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, +11, GETDATE()))
and YEAR(TimestampUTC) = YEAR(DATEADD(YEAR, -1, GETDATE()))
ELSE
MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE()))
and YEAR(TimestampUTC) = YEAR(DATEADD(YEAR, 0, GETDATE()))
END
FROM vDataLogChannelValue
) x
我工作的项目是Microsoft SQL Server Management Studio 2014。
我已经对代码的其他部分做了一些单元测试。当我添加案例时,错误会激活,代码不再工作
新年开始时,月份为1,我无法使用命令:
MONTHTimestampUTC=MONTHDATEADDMONTH,-1,GETDATE
因为第1个月减去第1个月就是第0个月 你错了
SELECT MONTH(DATEADD(month, -1, '20180101'))
返回12,而不是0,因此可以使用上面描述的命令。因为第1个月减去1是第0个月。不当你用dateadd从一月的日期中减去一个月时,你会得到上一年十二月的日期。您可以自己轻松测试:选择DATEADDMONTH,-1,'20180101'顺便说一句,您会得到错误,因为case返回一个原子值,它不能用于控制程序流。您知道如何在sql中使用程序流吗?我不明白您想做什么,因为您的前提不正确,正如我在第一篇评论中所解释的。你的意思是正确的,但我的数据库中有2017年和2016年的历史记录。当我使用您提供给我的声明时,我也会收到一年前该日期的信息。因此,我对年份或月份进行了限制,但当我这样做时,你的陈述就不再有效了。你是对的,@HoneyBadger已经向我明确说明了这一点,但我如何才能给出一个限制,即系统现在给我的是201712,而不是201612。请看重复问题中的答案。它处理如何获得正确的月份和年份。