日期函数 - sql中的错误

时间:2013-08-05 09:03:40

标签: sql-server tsql sql-server-2008-r2

我有一个包含字段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

2 个答案:

答案 0 :(得分: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 演示

答案 1 :(得分: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