Sql server 如何在存储过程中将int year转换为有效的日期格式
我的存储过程具有以下select语句: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 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