如何在2个数据表字符串之间选择%

时间:2018-12-20 08:37:43

标签: sql vb.net

这是我的代码,我想检查数据表中是否存在输入代码:

Dim dtColor = New DataTable
dtColor.Columns.Add("Code")
Dim dr=dtColor.newrow
dr("Code")="AB%M"
dtColor.Rows.Add(dr)
dr=dtColor.newrow
dr("Code")="BCT%"
dtColor.Rows.Add(dr)

Dim strCode="AB100Z"
Dim Arr=dtColor.Select(String.Format("'{0}' like Code ", strCode))

但是发生错误:

Error in Like operator: the string pattern 'AB%M' is invalid.

如何在2个数据表字符串之间选择类似%的数字?

2 个答案:

答案 0 :(得分:2)

您可以结合使用Regex.IsMatch和LINQ to Dataset来解决问题,因为LIKE中的DataTable运算符仅在语句的开头或结尾支持通配符,如以下示例所示:

Dim Arr = dtColor.AsEnumerable().Where(Function (row) 
              Dim value = row.Field(Of String)("Code")
              Return Regex.IsMatch(value, "AB.*M")
          End Function).ToArray()

如果您想在所有位置使用通配符,例如%AB%M%,只需通过添加更多.*代替%来替换正则表达式即可:

Dim Arr = dtColor.AsEnumerable().Where(Function (row) 
              Dim value = row.Field(Of String)("Code")
              Return Regex.IsMatch(value, ".*AB.*M.*")
          End Function).ToArray()

答案 1 :(得分:0)

OracleDB2具有REGEXP_LIKEMySQL具有RLIKE。您可以使用符合您情况的正则表达式进行搜索。对于VB,您可以找到一种使用REGEX的解决方法,如下所述(reference can be found here

Regex rx = new Regex(......, RegexOptions.Compiled );
foreach (DataRow row in dt.Rows)
{
   if (rx.IsMatch(row.Field<String>("myRow")))
   {
        ........
   }
   
}