【发布时间】:2011-01-17 21:10:31
【问题描述】:
如果我像这样过滤 BindingSource 的列:"column1 LIKE '%John%'",则该列中包含 John 的所有行都将返回。
如何返回column1包含[some text]John[some text]Doe的所有行?
"column1 LIKE '%John%Doe'" 不起作用。
【问题讨论】:
标签: .net filter bindingsource
如果我像这样过滤 BindingSource 的列:"column1 LIKE '%John%'",则该列中包含 John 的所有行都将返回。
如何返回column1包含[some text]John[some text]Doe的所有行?
"column1 LIKE '%John%Doe'" 不起作用。
【问题讨论】:
标签: .net filter bindingsource
根据http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx 的文档
通配符 * 和 % 可以互换使用 LIKE 中的通配符 比较。如果 LIKE 中的字符串 子句包含 * 或 %,那些 字符应包含在 括号 ([])。如果括号在 子句,每个括号字符应该 括在括号中(例如 [[] 或者 []])。允许使用通配符 模式的开始和结束,或在 模式的结尾,或开始 的一种模式。例如:
"ItemName LIKE '产品'"
"ItemName LIKE '*product'"
"ItemName LIKE '产品*'"
不允许使用通配符 字符串的中间。例如, 'te*xt' 是不允许的。
因此,你不能使用 LIKE 来做你想做的事。您的下一个最佳选择是获取字符串表示并使用正则表达式对其进行解析以查找您想要的文本。这会很慢。
你可以这样做
column1 LIKE '%John%' AND LIKE %Doe%'
但逻辑不同,可能不是你真正想要的。
编辑 - 添加
您最好在服务器级别进行过滤,因为您的数据库可能支持字符串中间的通配符。我刚刚在我们的 SQL Server 上尝试过它,它工作正常。 (SQL Server 2005)
【讨论】:
试试这个
"ItemName LIKE '*john*' and ItemName LIKE '*doe*'"
【讨论】: