0

我有一个要从中选择数据的表。一列“myCol”具有数据类型 tinyint。它的值从 1 到 8。

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

现在我正在尝试做这样的事情:

select * from myTable
where myCol in (@myVar)

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

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

如何更改它应该正常工作的选择?!

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

4

3 回答 3

1

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

select * from myTable
where CHARINDEX(cast(mycol as varchar), @myVar) > 0

SQLFiddle 演示

于 2013-09-24T07:52:06.123 回答
0

如果您创建一个类似于拆分逗号分隔值中接受的答案的函数,那么您将能够执行以下操作:

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

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

于 2013-09-24T07:55:47.267 回答
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 的所有行

于 2013-09-24T08:17:16.467 回答