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

如何将SQL的WHERE子句转换为正则表达式以简化重复LIKE条件

SQL 正则改写方案

你原SQL中的LIKE没有通配符,实际是精确匹配X-1、X-2、X-3三个值,不同数据库的正则语法存在差异,以下是主流数据库的实现方式:

核心正则逻辑

统一匹配规则为^X-[123]$,其中:

  • ^ 匹配字符串开头,避免匹配到AX-1这类前缀不符合的内容
  • [123] 匹配1、2、3中的任意一个字符
  • $ 匹配字符串结尾,避免匹配到X-10这类后缀不符合的内容

各数据库具体写法

  • MySQL / MariaDB
    使用REGEXP运算符,默认不区分大小写,需要区分大小写可加BINARY关键字:

    SELECT * 
    FROM my_table 
    WHERE series REGEXP '^X-[123]$';
    -- 区分大小写写法:WHERE series REGEXP BINARY '^X-[123]$'
    
  • PostgreSQL
    使用~运算符(区分大小写),不区分大小写可替换为~*:

    SELECT * 
    FROM my_table 
    WHERE series ~ '^X-[123]$';
    
  • Oracle
    使用REGEXP_LIKE函数:

    SELECT * 
    FROM my_table 
    WHERE REGEXP_LIKE(series, '^X-[123]$');
    
  • SQL Server
    除了正则写法外,SQL Server原生LIKE支持范围匹配,不需要额外用正则就能简化:

    -- 原生LIKE简化写法(兼容性更好)
    SELECT * 
    FROM my_table 
    WHERE series LIKE 'X-[123]';
    
    -- 正则写法(SQL Server 2017及以上支持)
    SELECT * 
    FROM my_table 
    WHERE REGEXP_MATCH(series, '^X-[123]$') = 1;
    

额外建议

如果你的场景需要兼容多类数据库,或者需要利用series字段的索引提升查询性能,更推荐用IN写法替代正则,性能和兼容性都更优:

SELECT * 
FROM my_table 
WHERE series IN ('X-1','X-2','X-3');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:00