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

REGEXP_LIKE使用求助:筛选含指定特殊字符及结尾带数字的字符串

解决方案

需求1:筛选name字段结尾含数字的记录

你当前使用的语句是有效的:

REGEXP_LIKE(name, '[0-9]$')

如果是MySQL环境,也可以用REGEXP/RLIKE替代REGEXP_LIKE,效果一致:

name REGEXP '[0-9]$'

需求2:筛选name字段包含指定特殊字符的记录

你的原语句失效是因为正则字符类存在几个关键问题:

  • -放在字符类中间会被解析为字符范围(比如+,-.会被理解为匹配+到.之间的所有字符,而非字面量-)
  • ]未放在字符类开头,导致正则提前结束,后续字符无法被正确识别
  • 反斜杠\未正确转义,无法匹配字面量\
  • 单引号'在SQL字符串中未转义,会触发语法错误

正确语句(Oracle环境)

REGEXP_LIKE(name, '[][~!@#$%^&*()_+=?/\\|{}"'';:><.,-]')

关键调整说明:

  • 将]和[放在字符类最开头,确保它们被解析为字面量字符
  • 将-移到字符类末尾,避免被识别为范围符号
  • 用\\匹配字面量\(正则转义规则)
  • 用''转义SQL字符串中的单引号'

MySQL环境适配

MySQL中反斜杠需要双重转义(SQL字符串转义+正则转义),且REGEXP_LIKE需8.0+版本支持,语句调整为:

REGEXP_LIKE(name, '[][~!@#$%^&*()_+=?/\\\\|{}"'';:><.,-]')

或使用传统REGEXP语法:

name REGEXP '[][~!@#$%^&*()_+=?/\\\\|{}"'';:><.,-]'

快速验证

可以用以下语句测试正则是否匹配目标字符:

-- Oracle环境
SELECT REGEXP_LIKE('test~', '[][~!@#$%^&*()_+=?/\\|{}"'';:><.,-]') AS has_special_char FROM dual;

-- MySQL环境
SELECT REGEXP_LIKE('test~', '[][~!@#$%^&*()_+=?/\\\\|{}"'';:><.,-]') AS has_special_char;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:00:50