Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 日期函数-sql中的错误_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql server 日期函数-sql中的错误

Sql server 日期函数-sql中的错误,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,我有一个带有字段DataNa类型date的members表 我想提出如下问题: Select DateDiff (year, datana, dateserial (year,12,31)) as years, .... from members ... etc ... 年份是一个参数值。但是系统告诉我DateSerial不是默认函数名的可识别值 我还试着做: Select DateDiff (year, datana, datevalue ('31/12/' + year)) as year

我有一个带有字段DataNa类型date的members表

我想提出如下问题:

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可识别的默认函数名


如果要从YYYY的@Year int参数创建31-12-YYYY,我使用的是SQL Server 2008R2,您可以这样做:

DATEADD(DD,-1,DATEADD(YY,@year - 1899,0))
但是,如果你想得到两个日期之间的年数差异——31.12并不重要,同一年的1.1将给出相同的结果,你可以通过以下方法得到:

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

如果要从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))

你在找这样的东西吗

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)


这是演示

你在找这样的东西吗

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)


这里是演示

您想要完成什么?年份是什么格式?您想要完成什么?年份是什么格式?全部。但是那里的DateSerial函数是SqlServer2088R2???@Antony No。这样的函数不存在。SQL Server 2012引入了类似于
DATEFROMPARTS
函数的功能,但在2008年R2中,您必须使用如图所示的替代方案。我明白了,感谢大家。但是那里的DateSerial函数是SqlServer2088R2???@Antony No。这样的函数不存在。SQL Server 2012引入了类似于
DATEFROMPARTS
函数的功能,但在2008 R2中,您必须使用如图所示的替代方法。我明白了,非常感谢。那么,您为什么选择去年的最后一个日期呢?当使用datediff(year,x,y)时,选择一年中的哪个日期无关紧要,那么为什么选择去年的最后一个日期呢?使用datediff(year,x,y)时,选择一年中的哪个日期并不重要