"小王,帮我查一下所有姓'张'的客户资料!"经理急匆匆地走过来说道,作为公司IT支持的小王立刻打开自己用VB开发的客户管理系统,但突然想到:有些客户可能登记的是"章"而不是"张",还有些中间可能带空格或特殊符号,这时,VB中的LIKE模糊查询功能就派上了大用场。
在开始LIKE查询前,我们需要先建立VB与数据库的连接,以Access数据库为例,最常用的方法是使用ADO对象:
Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Set conn = New ADODB.Connection conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb" conn.Open Set rs = New ADODB.Recordset
如果是SQL Server数据库,连接字符串会稍有不同:
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Password=密码;"
LIKE操作符用于在WHERE子句中搜索列中的指定模式,基本语法结构如下:
SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式
在VB中执行这个查询通常这样写:
Dim sql As String sql = "SELECT * FROM Customers WHERE CustomerName LIKE '张%'" rs.Open sql, conn, adOpenStatic, adLockReadOnly
%表示任意数量的字符(包括零个字符)。
' 查找所有以"张"开头的姓名 sql = "SELECT * FROM Customers WHERE Name LIKE '张%'" ' 查找所有包含"科技"的公司名称 sql = "SELECT * FROM Companies WHERE CompanyName LIKE '%科技%'" ' 查找所有以"有限公司"结尾的公司 sql = "SELECT * FROM Companies WHERE CompanyName LIKE '%有限公司'"
_表示单个字符。
' 查找姓"张"且名字为两个字的客户(如"张三"、"张伟") sql = "SELECT * FROM Customers WHERE Name LIKE '张_'" ' 查找产品编号第二位是"A"的所有产品 sql = "SELECT * FROM Products WHERE ProductCode LIKE '_A%'"
用于指定一个字符集,匹配方括号中的任意单个字符。
' 查找姓"张"或"章"的客户 sql = "SELECT * FROM Customers WHERE Name LIKE '[张章]%'" ' 查找编号第二位是1-3的数字的产品 sql = "SELECT * FROM Products WHERE ProductCode LIKE '_[1-3]%'"
匹配不在方括号中的任意单个字符。
' 查找姓张但不叫"张三"的客户 sql = "SELECT * FROM Customers WHERE Name LIKE '张[^三]'" ' 查找产品编号第二位不是字母A-C的产品 sql = "SELECT * FROM Products WHERE ProductCode LIKE '_[^A-C]%'"
Dim cmd As ADODB.Command Set cmd = New ADODB.Command cmd.ActiveConnection = conn cmd.CommandType = adCmdText cmd.CommandText = "SELECT * FROM Customers WHERE Name LIKE ?" Dim param As ADODB.Parameter Set param = cmd.CreateParameter("name", adVarChar, adParamInput, 50) param.Value = "张%" cmd.Parameters.Append param Set rs = cmd.Execute
如果允许用户输入搜索条件,可能需要转义真正的通配符:
Function EscapeLikeValue(value As String) As String EscapeLikeValue = Replace(Replace(Replace(value, "[", "[[]"), "%", "[%]"), "_", "[_]") End Function
不同数据库处理方式不同:
' Access数据库 sql = "SELECT * FROM Customers WHERE UCase(Name) LIKE '张%'" ' SQL Server sql = "SELECT * FROM Customers WHERE Name COLLATE Chinese_PRC_CI_AS LIKE '张%'"
Dim namePart As String, phonePart As String namePart = "张" phonePart = "138" sql = "SELECT * FROM Customers WHERE Name LIKE '" & namePart & "%' AND Phone LIKE '" & phonePart & "%'" rs.Open sql, conn
Dim conditions As String conditions = "" If txtName.Text <> "" Then conditions = conditions & " AND Name LIKE '" & EscapeLikeValue(txtName.Text) & "%'" End If If txtAddress.Text <> "" Then conditions = conditions & " AND Address LIKE '%" & EscapeLikeValue(txtAddress.Text) & "%'" End If ' 移除开头的" AND " If Len(conditions) > 0 Then conditions = Mid(conditions, 6) sql = "SELECT * FROM Customers WHERE " & conditions Else sql = "SELECT * FROM Customers" End If
避免前导通配符:像LIKE '%关键字'
这样的查询无法使用索引,会导致全表扫描。
考虑使用全文索引:对于大型文本字段的模糊查询,考虑使用数据库的全文索引功能。
限制返回字段:不要总是使用SELECT *
,只查询需要的字段。
分页查询:大数据量时实现分页:
sql = "SELECT TOP 20 * FROM Customers WHERE ID NOT IN (SELECT TOP 40 ID FROM Customers WHERE Name LIKE '张%' ORDER BY ID) AND Name LIKE '张%' ORDER BY ID"
Q:LIKE查询速度很慢怎么办? A:检查是否使用了前导通配符(如%开头),考虑添加索引或改用其他查询方式。
Q:如何查询包含百分号或下划线本身的数据?
A:使用转义符号,如LIKE '%\%%' ESCAPE '\'
(具体语法取决于数据库)。
Q:VB6中的LIKE和SQL的LIKE有什么区别? A:VB6本身也有LIKE运算符,但语法略有不同,本文讨论的是SQL语句中的LIKE。
掌握VB中的LIKE模糊查询技巧,可以大大增强数据库应用程序的实用性和用户体验,从简单的姓名查询到复杂的产品搜索,合理运用各种通配符组合,配合VB的数据访问技术,能够解决实际开发中大多数的模糊匹配需求,记得在实际应用中注意SQL注入防护和查询性能优化,这样开发出的数据库应用才会既安全又高效。
本文由 丁伟志 于2025-07-30发表在【云服务器提供商】,文中图片由(丁伟志)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/485505.html
发表评论