【问题标题】:sql server dateadd() using column name year and not keyword 'year'sql server dateadd() 使用列名年份而不是关键字“年份”
【发布时间】:2019-07-23 13:51:58
【问题描述】:

我正在使用 DATEADD(year, -3, GETDATE()) 在滚动期间提取最近几年的数据。

我还有一个名为 Year 的列,我正在创建的视图使用 MyTable.Year 而不是 sql 关键字“year”。

例如 DATEADD(MyTable.year, -3, GETDATE())

每次在视图中都会解决它,这真的很烦人。我有点生疏了,离开这个已经快 4 年了。

我如何确保它使用关键字“年份”,我觉得它这样做很奇怪。对此的任何解释也会有所帮助。 SQL Server 2016

谢谢大家。

编辑:我已经编辑了我放错位置的模式符号并确定了表名,很抱歉造成混淆

【问题讨论】:

  • “但观点很愚蠢” 老实说,我不这么认为。你说的没有道理。你说你想做DATEADD(table.dbo.year, -3, GETDATE())),但看起来你正在尝试使用数据库table中的表Date作为DATEADD的第一个参数。使用表格来替换定义的时间段值是没有意义的。第一个参数的值是明确定义的,你当然不能为它传递一个表对象。
  • 这绝对与查询引擎或查询如何编译无关 - Demo on db<>Fiddle。您所描述的听起来像是您的 IDE 中的智能感知正在发生的事情。您使用的是哪个 IDE?
  • 如果您的编辑器在使用关键字year 时遇到问题,请尝试使用select dateadd(yy, -3, getdate()) 而不是select dateadd(year, -3, getdate())
  • 您可以随时回答您自己的问题,解释您为什么会遇到这个问题以及解决了什么问题。这可能会帮助 SO 的未来用户遇到同样的问题
  • 包含代码而不是图像。这些图像太小了,我无法阅读 SQL。

标签: sql sql-server sql-view dateadd


【解决方案1】:

我不确定我是否理解正确,但您想强制执行关键字,因此您想从当前日期减去 3 年,对吗?这应该有效:

SELECT DATEADD(yy, -3, GETDATE())

SELECT DATEADD(yyyy, -3, GETDATE())

(除非您有名为 yy 和 yyyy 的列;-))

否则请原谅我的误会……

【讨论】:

  • 这是修复,谢谢。知道为什么会这样吗?
【解决方案2】:

您的编辑器似乎对关键字YEAR 有问题,并将其替换为来自也称为year 的列中的值

这可以通过在 DateAdd 函数中使用关键字 year 的同义词来解决。
所以不是

dateadd(year, -3, getdate())

使用

dateadd(yy, -3, getdate())

【讨论】:

    【解决方案3】:

    您可以将您的表放在子查询和别名 [Year] 列中。 像

    SELECT ... FROM (SELECT [Year] AS "MyYear" FROM ...) X
    

    (或使用 CTE)

    那么 Year 只表示关键字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2022-01-22
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多