我有一个表,我想从中选择数据。一个颜色'myCol‘有数据类型tinyint。它的值从1到8。
在我的选择中,我有一个带有数据类型varchar()的变量@myVar,它的值类似于'1,2‘或'3,4’。
现在我试着做这样的事情:
select * from myTable
where myCol in (@myVar)不幸的是,我得到了以下错误:
当varchar值'2,3‘转换为数据类型tinyint时,转换失败。
如何改变它应该做的选择?!
保持尽可能高的选择性能是非常重要的!
发布于 2013-09-24 07:52:06
由于只有1到8之间的值,所以可以使用字符串搜索方法。有点像
select * from myTable
where CHARINDEX(cast(mycol as varchar), @myVar) > 0SQLFiddle演示
发布于 2013-09-24 07:55:47
如果您在逗号分离值的分裂中创建一个类似于可接受的答案的函数,那么您就可以这样做:
select * from myTable t
inner join dbo.fnSplitStringAsTable(@myVar, ',') s on t.myCol = s.Value请注意,根据您的语法和错误消息,我假设Server。
发布于 2013-09-24 08:17:16
更改数据以包含标记的枚举
[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的所有行。
https://stackoverflow.com/questions/18975841
复制相似问题