如何在 OLDEB sql 选择命令中检查字段值是不是为特定字符长度?

Posted

技术标签:

【中文标题】如何在 OLDEB sql 选择命令中检查字段值是不是为特定字符长度?【英文标题】:How to check if a field value is a certain character length in a OLDEB sql select command?如何在 OLDEB sql 选择命令中检查字段值是否为特定字符长度? 【发布时间】:2011-05-05 15:35:38 【问题描述】:

我正在使用 C# OleDB 连接从访问数据库中读取数据。我不想要任何长度少于三个字符的结果。

我当前的代码显示“无效的模式字符串”错误。为什么会出现此错误,我该如何解决?

string qry = "Select * from Table1 where ((CALLNO not like '') and " + 
             "((CALLNO like '%" + suggestedCallNo + "%') or ('" + suggestedCallNo + "' like '%' & CALLNO & '%')) and " +
             "((Len(CALLNO))>=3))";
OleDbCommand myCommand = new OleDbCommand(qry, myConnection);
OleDbDataReader myReader = myCommand.ExecuteReader();

如果没有((Len(CALLNO))>=3),此代码可以正常工作。但是,一旦我添加了该行,一旦执行阅读器,我就会得到一个 "Invalid pattern string" 异常。

我尝试了一些事情:

而不是((Len(CALLNO))>=3) 使用(CALLNO not like ''),这不会导致任何错误,所以我不会缺少括号。

尝试使用像'_''_ _''_ _ _' 这样的单字符通配符,所以我使用了((Len(CALLNO))>=3) 而不是(CALLNO not like '_'),这会导致相同的“无效模式字符串”错误.事实上,我发现唯一不会引发错误的是空字符串 '' 和完整的通配符 '%'

我还直接在 access 中从查询字符串运行查询,我没有收到任何类型的错误。

感谢您提供任何信息,

LMB

【问题讨论】:

你连接的是什么数据源? 我正在连接访问数据库表:OleDbConnection myConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\output.mdb") 【参考方案1】:

您应该使用?,而不是_

您可以选择的模式 是:

* 允许你匹配任意长度的任意字符串(包括零长度) ?允许您匹配单个字符 # 允许您匹配单个数字

http://www.techonthenet.com/access/queries/like.php

所以你应该可以使用LIKE '???%'

编辑: 正如大卫指出的那样,它应该是'???*' 而不是'???%'。 但是,LEN 函数也应该可以工作,所以可能还有其他问题。

【讨论】:

我尝试使用 "(CALLNO like '???%'))";这引发了同样的异常,我也尝试过“(CALLNO like '?%'))”;和“(CALLNO like '___%'))”;都一样的效果,不工作。 Jet/ACE 的默认 ANSI 89 SQL 模式中的通配符是 ?单个字符和 * 多个字符。除非您使用 Access/Jet/ACE 特定的 ALIKE 运算符而不是 LIKE,否则您不能将 % 混入其中。 我从标签中看到您正在使用 OLEDB。在这种情况下,必须使用 ANSI 92 通配符,即 _ 和 %。 ?和 * 在这种情况下将按字面意思对待。我不知道如果您使用 ALIKE 运算符向 OLEDB 传递 SQL 语句会发生什么。

以上是关于如何在 OLDEB sql 选择命令中检查字段值是不是为特定字符长度?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保在 SQL 数据库字段中输入的值是唯一的?

Mysql 数据字段值是用逗号隔开,如何写SQL语句

Mysql 数据字段值是用逗号隔开,如何写SQL语句

如何检查当前行是不是是sql查询中最后选择的行?

SQL中如何遍历表并更新某个字段的值

oracle在sql中判断字段值是数字还是字符串