SQLite中用LIKE/REGEXP匹配string_id特殊内容的SQL查询问题
解决方案:基于LIKE的SQLite查询语句
我来帮你搞定这个匹配逻辑!先结合你的例子把规则理清楚:
- 输入
1时,要匹配三类行:string_id完全等于1的行(第1行);string_id以1/开头的行(第2行);string_id包含-1的行(第4行);
- 输入
2时,要匹配两类行:string_id以2/开头的行(第3、4行);string_id包含-2的行(第2行);
基于这个逻辑,用SQLite默认支持的LIKE操作符就能实现,不需要额外启用REGEXP(当然也可以用REGEXP,但LIKE更通用)。完善后的SQL语句如下(用参数占位符避免SQL注入):
SELECT * FROM data_table WHERE string_id = ? OR string_id LIKE ? || '/%' OR string_id LIKE '%-' || ? || '%';
验证你的例子:
- 当用户输入
1时,语句等价于:
结果正好匹配第1、2、4行,排除第3行,完全符合需求。SELECT * FROM data_table WHERE string_id = '1' OR string_id LIKE '1/%' OR string_id LIKE '%-1%'; - 当用户输入
2时,语句等价于:
结果正好匹配第2、3、4行,排除第1行,也符合你的要求。SELECT * FROM data_table WHERE string_id = '2' OR string_id LIKE '2/%' OR string_id LIKE '%-2%';
补充说明:
- 用
?作为参数占位符是最佳实践,避免直接拼接用户输入导致的SQL注入风险; - 如果你的SQLite环境支持REGEXP,也可以用正则实现,写法如下(兼容性稍差):
SELECT * FROM data_table WHERE string_id REGEXP '^' || ? || '$|^' || ? || '/|-' || ?;
内容的提问来源于stack exchange,提问作者mali
相关产品推荐
相关产品推荐

