Sql server 如何在存储过程中将int year转换为有效的日期格式

Sql server 如何在存储过程中将int year转换为有效的日期格式,sql-server,type-conversion,getdate,Sql Server,Type Conversion,Getdate,我的存储过程具有以下select语句: select Name,Holiday from tblNames where ID = @ID and DATENAME(YEAR, GETDATE()) = @Year 执行语句时,我有一个错误 “将数据类型int转换为nvarchar时出错。” 如何将@Year参数转换为正确的年份?函数的返回类型是nvarchar,您需要返回整数值的datepart函数,因此改为datepart(Year,GETDATE()) datename是用来获取月份或工

我的存储过程具有以下select语句:

select Name,Holiday from tblNames where ID = @ID and DATENAME(YEAR, GETDATE()) = @Year 
执行语句时,我有一个错误

“将数据类型int转换为nvarchar时出错。”


如何将
@Year
参数转换为正确的年份?

函数的返回类型是
nvarchar
,您需要返回整数值的
datepart
函数,因此改为
datepart(Year,GETDATE())

datename
是用来获取月份或工作日名称的


或者您可以使用Gordon L在评论中提到的
year(getdate())
函数。

函数的返回类型是
nvarchar
,您需要返回整数值的
datepart
函数,因此改为
datepart(year,getdate())

datename
是用来获取月份或工作日名称的


或者您可以使用Gordon L在评论中提到的
year(getdate())
函数。

我建议您从修复特定错误消息切换回原始问题。您的表中有日期,需要按范围进行筛选。因此,只需向服务器提供范围边界。这也将避免存储数据的任何转换。为了避免尾部时间问题,您可以将“23:59:59.997”附加到范围上限,或者(我的建议)提供下一个日期并通过
进行比较。我建议您从修复特定错误消息切换回原始问题。您的表中有日期,需要按范围进行筛选。因此,只需向服务器提供范围边界。这也将避免存储数据的任何转换。为了避免尾部时间问题,你可以在范围的上限上加上'23:59:59.997',或者(我的建议)提供下一个日期,并通过
或更好的方式进行比较,只需使用
year()
@GordonLinoff或那样的方式。或者更好的方式,只需使用
year()
@GordonLinoff或那样的方式。因为这个问题的标题应该改为“如何将日期的年部分作为整数值?”这个问题的标题应该改为“如何将日期的年部分作为整数值?”
set @startdate = ...
set @enddate = dateadd(dd, 1, ...)

select *
from mytable
where t.date >= @startdate and t.date < @enddate