将 varchar 值“%”转换为数据类型 int 时转换失败

Posted

技术标签:

【中文标题】将 varchar 值“%”转换为数据类型 int 时转换失败【英文标题】:Conversion failed when converting the varchar value '%' to data type int 【发布时间】:2015-12-16 12:14:02 【问题描述】:

我创建了一个程序并收到了这条消息

将 varchar 值 '%' 转换为数据类型 int 时转换失败。

create procedure consultarEquipo (@id varchar(10), @marca varchar(20),
@year int, @factura varchar(50), @poliza varchar(30))
as begin

select * from C_EQUIPOS
where (ID_EQUIPO like '%'+@id+'%' and
MARCA like '%'+@marca+'%' and
YEAR like '%'+@year+'%' and
FACTURA like '%'+@factura+'%' and
SEGURO like '%'+@poliza+'%')

end
go

我不知道它可能是什么,但是当我将程序更改为这样时:

create procedure consultarEquipo (@id varchar(10), @marca varchar(20))
as begin

select * from C_EQUIPOS
where (ID_EQUIPO like '%'+@id+'%' and
MARCA like '%'+@marca+'%')

end
go

它似乎工作得很好。我是 SQL 的新手,所以任何帮助都将不胜感激,也许有更好的方法来做我想做的事情?

【问题讨论】:

Year 大概是一个int 列,因此您不应该尝试直接进行字符串比较。我不确定你想用YEAR like '%'+@year+'%' 完成什么,我会说年份是否相等,它不应该部分等于变量。此外,请用适当的 dbms 标记您的问题,您可能没有同时使用 sql server 和 mysql。最后,要获得更完整的答案,请发布您的架构和示例数据。 【参考方案1】:

这是在where 子句中:

YEAR like '%'+@year+'%' and

@year 是一个整数。因此,您需要将其转换为字符串:

YEAR like '%'+ cast(@year as varchar(255)) + '%' and

为什么您将like 用于名为YEAR 的列是可疑的。也许你只是想要:

(YEAR = @year or @year IS NULL) and

【讨论】:

以上是关于将 varchar 值“%”转换为数据类型 int 时转换失败的主要内容,如果未能解决你的问题,请参考以下文章

将 varchar 值转换为数据类型 int 时转换失败

将 varchar 值“Collect_Date”转换为数据类型 int 时转换失败

将 varchar 值“A0001”转换为数据类型 int 时转换失败

将 varchar 值“xxx”转换为数据类型 int 时,函数错误中的光标转换失败

将 varchar 值“FOT”转换为数据类型 int 时转换失败

将 varchar 值“Q4”转换为数据类型 int 时转换失败