SQL选择使用'in'从字符串转换为tinyint

时间:2013-09-24 07:49:39

标签: sql sql-server select

我有一张表,我想从中选择数据。一个coloumn'myCol'的数据类型为tinyint。它的值为1到8。

在我的选择中,我有一个带有数据类型varchar()的变量@myVar,其值为'1,2'或'3,4'。

现在我正在尝试这样做:

select * from myTable
where myCol in (@myVar)

不幸的是我收到以下错误:

  

将varchar值'2,3'转换为数据类型tinyint时转换失败。

如何更改它的工作选择?!

保持选择性能尽可能高是非常重要的!

3 个答案:

答案 0 :(得分:1)

由于您只有1到8的值,因此可以使用字符串搜索方法。像

这样的东西
select * from myTable
where CHARINDEX(cast(mycol as varchar), @myVar) > 0

SQLFiddle demo

答案 1 :(得分:0)

如果你创建一个类似于Splitting of comma separated values中接受的答案的功能,你就可以这样做:

select * from myTable t
    inner join dbo.fnSplitStringAsTable(@myVar, ',') s on t.myCol = s.Value

请注意,我假设SQL Server,基于您的语法和错误消息。

答案 2 :(得分:0)

将您的数据更改为包含已标记的枚举

[Flags]
public enum ContactMethod
{
  Value1 = 1,
  Value2 = 2,
  Value3 = 4,
  Value4 = 8,
  Value5 = 16,
  Value6 = 32,
  Value7 = 64,
  Value8 = 128
}


select * from mytable where myCol | 3 = 3 

然后会返回值为1或2的所有行