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

Oracle SQL Developer中多条件LIKE筛选及查询优化方法

没问题!针对你这种多个LIKE条件堆叠的场景,确实可以用更简洁的写法来替代,不用创建新表,下面给你几种实用的方案:

方案1:使用正则表达式(推荐,简洁性拉满)

不同数据库的正则语法略有差异,给你列几个主流数据库的写法:

  • MySQL/MariaDB:用REGEXP或RLIKE操作符,把所有匹配模式整合到一个正则表达式中:
SELECT * FROM table
WHERE var1 REGEXP '^file_X_2022_(1_(001|004|006)|8_(002|0015)|10_1000)';

解释:^限定字符串开头,括号用来分组,|表示“或”,完全等价于你原来的多个OR LIKE逻辑,而且维护起来更方便。

  • PostgreSQL:用~(大小写敏感)或~*(大小写不敏感)操作符:
SELECT * FROM table
WHERE var1 ~ '^file_X_2022_(1_(001|004|006)|8_(002|0015)|10_1000)';
  • SQL Server:用PATINDEX函数(支持有限正则语法),或者结合子查询的方式(见方案2):
SELECT * FROM table
WHERE PATINDEX('file_X_2022_1_00[146]%', var1) > 0
   OR PATINDEX('file_X_2022_8_00(2|15)%', var1) > 0
   OR PATINDEX('file_X_2022_10_1000%', var1) > 0;

方案2:用子查询模拟IN的效果(更贴近你想要的写法)

如果觉得正则不够直观,可以用VALUES子句生成前缀列表,再结合EXISTS实现类似IN的逻辑:
(适用于MySQL 8.0+、SQL Server、PostgreSQL等支持VALUES子查询的数据库)

SELECT t.* FROM table t
WHERE EXISTS (
    SELECT 1 FROM (
        VALUES 
            ('file_X_2022_1_001'),
            ('file_X_2022_1_004'),
            ('file_X_2022_1_006'),
            ('file_X_2022_8_002'),
            ('file_X_2022_8_0015'),
            ('file_X_2022_10_1000')
    ) AS prefixes(p)
    WHERE t.var1 LIKE CONCAT(p, '%')
);

这种写法完全符合你“把所有条件整合到一个括号中”的需求,新增或删除前缀直接修改VALUES里的内容即可,可读性和维护性都很强。

内容的提问来源于stack exchange,提问作者Ruser-lab9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:15:58