视图设计器

时间:2018-04-13 15:15:22

标签: sql-server views ssms

我遇到了超级讨厌的边缘情况。

在视图中,我有一个表有一个名为'Year'的列,它是一个整数。 在这个视图中,我试图过滤与去年相关的内容,因此我使用以下代码段。

WHERE Jobs.Year > YEAR(DATEADD(year, -1, GETDATE()))

但是,ssms,无论如何都是无限的智慧,认为它是有用的,并在datepart年份替换为Year列。

WHERE dbo.Jobs.Year > YEAR(DATEADD(dbo.Jobs.Year, - 1, GETDATE()))

无论如何都要逃避这种行为吗?

编辑: 这是在SSMS 2014上,似乎这个问题在以后的某些版本中不存在。

1 个答案:

答案 0 :(得分:2)

从我的评论转到此处。

您在日期部分中遇到“YEAR”一词的问题,因为它是一个保留字。您可以更改以获得与以下相同的结果:

SELECT YEAR(DATEADD(YEAR, -1, GETDATE())) 

为:

SELECT YEAR(DATEADD(yy, -1, GETDATE())) 

此处参考是所有有效日期部分的列表: https://www.w3schools.com/sql/func_sqlserver_datepart.asp