我遇到了超级讨厌的边缘情况。
在视图中,我有一个表有一个名为'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上,似乎这个问题在以后的某些版本中不存在。
答案 0 :(得分:2)
从我的评论转到此处。
您在日期部分中遇到“YEAR”一词的问题,因为它是一个保留字。您可以更改以获得与以下相同的结果:
SELECT YEAR(DATEADD(YEAR, -1, GETDATE()))
为:
SELECT YEAR(DATEADD(yy, -1, GETDATE()))
此处参考是所有有效日期部分的列表: https://www.w3schools.com/sql/func_sqlserver_datepart.asp