0

我有一个字段 DataNa 类型日期的成员表。

我想进行如下查询:

Select DateDiff (year, datana, dateserial (year,12,31)) as years, ....
from members ... etc ...

年份是一个参数值。但是系统告诉我 DateSerial 不是默认函数名称的可识别值。

我也尝试过:

Select DateDiff (year, datana, datevalue ('31/12/' + year)) as years, ....
from members ... etc ...

它说它也不是 DateValue 识别的默认函数名称

我正在使用 SQL Server 2008R2

4

2 回答 2

2

你在寻找这样的东西吗?

SELECT DATEDIFF(YEAR, datana, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, -1)) years
  FROM members

这部分

DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, -1) 

返回当前年份的最后一天(例如2013-12-31

这是SQLFiddle演示

于 2013-08-05T09:19:58.593 回答
1

如果您想从 YYYY 的 @Year int 参数中创建 31-12-YYYY - 您可以这样做:

DATEADD(DD,-1,DATEADD(YY,@year - 1899,0))

但是,如果您想获得两个日期之间的年份差异 - 将其设置为 31.12 并不重要,同一年的 1.1 会给出相同的结果,您可以通过以下方式获得:

SELECT DATEDIFF (YEAR, datana, DATEADD(YY,@year - 1900,0))

SQLFiddleDEMO

于 2013-08-05T09:19:32.623 回答