我正在尝试使用select语句创建一个能够按条件,platenumber和最大音量搜索的搜索功能:
select Condition, PlateNumber, MaximumVolumeLoad
from [Truck Table]
where Condition=@id OR PlateNumber=@id OR MaximumVolumeLoad>=@id
然而,问题是My MaximumVolumeLoad列被设置为int,每当我搜索条件时,我都会收到此错误:
将nvarchar值'good'转换为数据类型int时转换失败。
有没有办法可以同时搜索它们而无需创建其他查询?
答案 0 :(得分:2)
这似乎是一个坏主意,但您可以通过将值转换为数字来实现:
select Condition, PlateNumber, MaximumVolumeLoad
from [Truck Table] tt
where Condition = @id or
PlateNumber = @id or
MaximumVolumeLoad >= try_convert(int, @id);
请注意,如果该值不是有效整数,则返回NULL
,因此它永远不会与MaximumVolumeLoad
匹配。据推测,这是正确的行为。
答案 1 :(得分:0)
可能是Gordon建议在比较之前将列转换为varchar的替代方法。这应该表现得一样。
select Condition, PlateNumber, MaximumVolumeLoad
from [Truck Table] tt
where Condition = @id or
PlateNumber = @id or
cast(MaximumVolumeLoad as varchar(10)) >= @id;
注意:忘记添加它假设您将在@id中包含字母。基于ASCII字符集编号出现在字母表之前。因此,如果是输入的任何字符串,这应该按预期工作。 但是你检查' 2' > =' +'结果可能会出错。 (如果@id的值为' +')