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