SQL: 将 varchar 转换为 int 时出错
SQL: Error converting varchar to int
我有以下转换错误
Conversion failed when converting the varchar value '2016-October' to
data type 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
我做错了什么,做这样的事情的正确方法是什么?
问题在
DATEPART(Year, Holiday) = case when @month is null then 2016 else convert(varchar,2016) + '-' + @Month end
Datepart(year, holiday) 给你一个整数值,但是 returns 一个整数或一个字符串。在您的声明中,2016 年无法评估为“2016-10 月”
我猜你想归档:
您的场景
- if
@month is null
--> 搜索 2016 年的所有值
- if
@month is not null
--> 搜索所有包含月份和年份的值
您的问题:
当 @month is not null
时,您的查询将是:
... and DATEPART(Year, Holiday) = convert(varchar,2016) + '-' @Month
这是 integer 和 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
我有以下转换错误
Conversion failed when converting the varchar value '2016-October' to data type 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
我做错了什么,做这样的事情的正确方法是什么?
问题在
DATEPART(Year, Holiday) = case when @month is null then 2016 else convert(varchar,2016) + '-' + @Month end
Datepart(year, holiday) 给你一个整数值,但是 returns 一个整数或一个字符串。在您的声明中,2016 年无法评估为“2016-10 月”
我猜你想归档:
您的场景
- if
@month is null
--> 搜索 2016 年的所有值 - if
@month is not null
--> 搜索所有包含月份和年份的值
您的问题:
当
@month is not null
时,您的查询将是:... and DATEPART(Year, Holiday) = convert(varchar,2016) + '-' @Month
这是 integer 和 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