Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:“=”在大小写中出现语法错误_Sql Server_Syntax Error_Case - Fatal编程技术网

Sql server SQL Server:“=”在大小写中出现语法错误

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

我正在做一个查询,我想要一个月的平均温度,但我有一个挑战。新年开始时,月份为1,我无法使用命令:

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。请看重复问题中的答案。它处理如何获得正确的月份和年份。