选择查询int或nvarchar值

时间:2018-04-01 15:11:16

标签: sql sql-server

我正在尝试使用select语句创建一个能够按条件,platenumber和最大音量搜索的搜索功能:

select Condition, PlateNumber, MaximumVolumeLoad 
from [Truck Table] 
where Condition=@id OR PlateNumber=@id OR MaximumVolumeLoad>=@id

然而,问题是My MaximumVolumeLoad列被设置为int,每当我搜索条件时,我都会收到此错误:

  

将nvarchar值'good'转换为数据类型int时转换失败。

有没有办法可以同时搜索它们而无需创建其他查询?

2 个答案:

答案 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的值为' +')