Excel 2013连接Access数据库LIKE查询匹配规则咨询
解决Access中带LIKE的SELECT语句匹配问题
你当前遇到的问题是因为写的LIKE模式范围太宽了——你的语句SELECT * FROM table_name WHERE column_name LIKE '%[0-9][0-9][0-9][_][a-z]'会匹配任何包含3位数字+下划线+单个小写字母的列值,不管这个组合出现在字符串的哪个位置。比如示例2里的023_tr包含023_t,示例3里的0214_dg包含214_d,所以都会被命中,自然返回了所有值。
根据你只想要第一个示例的需求(也就是最后一段是3位数字+下划线+字符串的列值),给你两个实用的方案:
方案一:匹配斜杠分隔的最后一段(适合路径类值)
如果你的列值都是类似路径的格式(用斜杠分隔),且需要最后一段是ddd_xxxx(ddd是3位数字,xxxx是任意字符串),可以结合INSTRREV函数提取最后一段再匹配:
SELECT * FROM table_name WHERE RIGHT(column_name, LEN(column_name) - INSTRREV(column_name, '/')) LIKE '[0-9][0-9][0-9][_]%'
INSTRREV(column_name, '/')会找到最后一个斜杠的位置RIGHT(...)用来提取斜杠后面的最后一段内容LIKE '[0-9][0-9][0-9][_]%'确保最后一段是以3位数字+下划线开头的
方案二:精确匹配结尾的3位数字+下划线+字符串
如果你需要严格匹配整个列值的结尾部分是ddd_xxxx(xxxx是任意长度的非空字符串),可以用以下条件组合:
SELECT * FROM table_name WHERE -- 确保字符串里有下划线 INSTRREV(column_name, '_') > 0 -- 下划线前面至少有3位字符(够放3位数字) AND INSTRREV(column_name, '_') - 3 >= 1 -- 下划线前的3位是数字 AND MID(column_name, INSTRREV(column_name, '_') - 3, 3) LIKE '[0-9][0-9][0-9]' -- 下划线后面有字符(避免匹配以ddd_结尾的情况) AND LEN(column_name) > INSTRREV(column_name, '_')
另外提个Access LIKE的小细节:下划线_本身是单个任意字符的通配符,所以你用[_]匹配字面下划线的写法是正确的;Excel连接Access用的是ODBC模式,所以用%作为任意多字符的通配符也是没问题的。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

