如果我按照以下方式过滤BindingSource的列:"column1 LIKE '%John%'"
,则该列上包含John的所有行都将返回。
如何返回column1包含[some text]John[some text]Doe
的所有行?
"column1 LIKE '%John%Doe'"
不起作用。
答案 0 :(得分:2)
根据http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx
的文件通配符*和% 可以互换使用 LIKE中的通配符 比较。如果LIKE中的字符串 子句包含*或%,那些 字符应包含在中 括号([])。如果支架在 子句,每个括号字符应该 括在括号内(例如 [[] 要么 []])。允许使用通配符 模式的开始和结束,或者 模式的结束,或者在开始时 一种模式。例如:
“ItemName LIKE' product '”
“ItemName LIKE'* product'”
“ItemName LIKE'产品*'”
不允许使用通配符 中间的一个字符串。例如,
因此,您不能使用LIKE来做您想做的事情。您的下一个最佳选择是获取字符串表示并使用正则表达式来解析它以查找所需的文本。那将是缓慢的。
你可以做
column1 LIKE '%John%' AND LIKE %Doe%'
但逻辑不同,可能不是你真正想要的。
修改 - 添加
您可能最好在服务器级别进行过滤,因为您的数据库可能支持字符串中间的通配符。我只是在我们的SQL Server上试过它,它工作正常。 (SQL Server 2005)
答案 1 :(得分:-1)
试试这个
"ItemName LIKE '*john*' and ItemName LIKE '*doe*'"