SQL select从字符串到tinyint的“in”转换
我有一个要从中选择数据的表。一个列“myCol”的数据类型为tinyint。它的值从1到8 在我的select中,我有一个数据类型为varchar的变量@myVar,其值类似于“1,2”或“3,4” 现在我试着做这样的事情:SQL select从字符串到tinyint的“in”转换,sql,sql-server,select,Sql,Sql Server,Select,我有一个要从中选择数据的表。一个列“myCol”的数据类型为tinyint。它的值从1到8 在我的select中,我有一个数据类型为varchar的变量@myVar,其值类似于“1,2”或“3,4” 现在我试着做这样的事情: select * from myTable where myCol in (@myVar) 不幸的是,我得到了以下错误: 将varchar值“2,3”转换为数据类型tinyint时,转换失败 如何更改选择,使其正常工作 保持select性能尽可能高是非常重要的 因为只有1
select * from myTable
where myCol in (@myVar)
不幸的是,我得到了以下错误:
将varchar值“2,3”转换为数据类型tinyint时,转换失败
如何更改选择,使其正常工作
保持select性能尽可能高是非常重要的 因为只有1到8之间的值,所以可以使用字符串搜索方法。差不多
select * from myTable
where CHARINDEX(cast(mycol as varchar), @myVar) > 0
如果您创建了一个类似于中接受答案的函数,那么您将能够执行以下操作:
select * from myTable t
inner join dbo.fnSplitStringAsTable(@myVar, ',') s on t.myCol = s.Value
请注意,根据您的语法和错误消息,我假设使用SQL Server。将数据更改为包含标记的枚举
[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的所有行谢谢您的回答。我们建议这张桌子很大。在一个单独的表中拆分字符串并进行内部联接是性能杀手吗?谢谢你的帮助?@dotnetsharp它不应该破坏性能,不。它没有Juergen的答案那么紧凑,但是可能会更快,因为需要更少的强制转换。最好的答案是尝试一下,然后发现——我很想自己知道。