我有以下转换错误
将varchar值'2016-October'转换为数据类型int时,转换失败。
在以下语句中:
declare @month varchar(20) = 'October'
select HolidayName, Holiday
from tblHoliday
where PortfolioID = 2 and DATEPART(Year, Holiday) = case when @month is null then 2016 else convert(varchar,2016) + '-' + @Month end
我在做什么错,做这样的事情的正确方法是什么?
我想您要存档:
您的情况
@month is null
->搜索2016年的所有值@month is not null
->用月和年搜索所有值您的问题:
当时@month is not null
,您的查询将是:
... and DATEPART(Year, Holiday) = convert(varchar,2016) + '-' @Month
在整数和varchar之间进行比较
tsql中没有可用于将月份名称直接转换为整数的内置函数,因此一种解决方法是:
SELECT DATEPART(MM, @month + '01 2000')
我认为使用case...when...then
不会在这里起作用,因为在每种情况下它的比较方式都不同,所以我建议使用if...else
代码样例
declare @month varchar(20) = 'October'
if @month is null begin
select HolidayName, Holiday
from tblHoliday
where PortfolioID = 2
and DATEPART(Year, Holiday) = 2016
end
else begin
select HolidayName, Holiday
from tblHoliday
where PortfolioID = 2
and DATEPART(Year, Holiday) = 2016
and DATEPART(Month, Holiday) = DATEPART(MM, @month + '01 2000')
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句