You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite如何筛选名称以"_1"结尾的数据库表名

解决SQLite中.tables命令匹配下划线通配符的问题

你遇到的核心问题是:SQLite的.tables命令默认采用LIKE模式匹配,而在LIKE语法里,下划线_是用来匹配「单个任意字符」的通配符,不是字面意义的下划线。你之前尝试的ESCAPE '_'写法不对——ESCAPE指定的是「转义字符」(比如反斜杠\),而非要转义的目标字符本身,所以才会继续匹配到125_11这类不符合预期的表名。

下面给你两种可靠的解决方案:

方案1:直接查询系统表sqlite_master(最精准)

其实.tables命令本质上就是查询SQLite的系统表sqlite_master,所以直接写SQL语句能完全掌控匹配规则:

SELECT name FROM sqlite_master 
WHERE type='table' 
AND name LIKE '%\_1' ESCAPE '\';

这里的关键细节:

  • ESCAPE '\'告诉SQLite用反斜杠作为转义标记
  • \_就代表字面意义的下划线,不再是通配符
  • 整个模式%\_1会严格匹配「以_1结尾」的表名,完美过滤掉_11、_21这类后缀的表。

方案2:使用.tables的GLOB模式匹配

如果你更偏好.tables命令的简洁性,可以切换到GLOB模式——在GLOB语法里,通配符只有*(匹配任意数量字符)和?(匹配单个字符),下划线_就是普通字符,不需要转义:

.tables '*_1'

这个命令会直接匹配所有以_1结尾的表名,不会误匹配其他后缀的表。

额外补充:针对你的表名格式的严格匹配

因为你的所有表名都符合^\d+_\d+$(数字+下划线+数字)的格式,也可以用更严格的规则确保只匹配「数字_1」结尾的表,比如:

SELECT name FROM sqlite_master 
WHERE type='table' 
AND name REGEXP '^\d+_1$';

注意:SQLite默认没有启用REGEXP函数,需要编译时开启或自定义函数才能使用,所以前两种方案更通用。

内容的提问来源于stack exchange,提问作者Yoann Pageaud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:24:47