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

时间:2016-02-18 22:35:11

标签: sql-server type-conversion getdate

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

select Name,Holiday from tblNames where ID = @ID and DATENAME(YEAR, GETDATE()) = @Year 

执行语句时出现错误

  

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

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

2 个答案:

答案 0 :(得分:2)

datename函数的返回类型为nvarchar,您需要返回整数值的datepart函数,因此请更改为DATEPART(YEAR, GETDATE())

datename是用于获取月份或工作日名称的内容。

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

答案 1 :(得分:0)

我建议您从修复特定错误消息切换回原始问题。您的表中有一个日期,需要按范围过滤。所以只需向服务器提供范围界限。这也将避免存储数据的任何转换。为避免尾部时间问题,您可以将'23:59:59.997'附加到范围的上限或(我的建议)提供下一个日期并按<而不是<=进行比较

set @startdate = ...
set @enddate = dateadd(dd, 1, ...)

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

复杂的转化可能导致无法使用适当的索引。如果你可以转换你的参数并为服务器提供准备好的值 - 努力这样做。