PLSQL字符间指定间隔过滤:如何编写符合预期的SQL语句?
符合指定字符间隔过滤的PLSQL语句实现
原SQL使用的LIKE 'PO%V%%B%%%%'匹配逻辑过于宽松,无法精确控制各固定字符段之间的字符数量,导致返回不符合预期的结果。要实现PO后1个任意字符、V后2个任意字符、B后4个任意字符的精确匹配,建议使用正则表达式函数REGEXP_LIKE替代普通LIKE。
最终PLSQL语句
SELECT DISTINCT FE.parent_entity, FEATTR.attribute_value FROM F_ENTITY FE INNER JOIN F_ENTITYATTRIBUTE FEATTR ON FEATTR.entity = FE.entity WHERE REGEXP_LIKE(FEATTR.attribute_value, '^PO.{1}V.{2}B.{4}$');
正则表达式规则说明
正则^PO.{1}V.{2}B.{4}$的约束逻辑如下:
^:匹配字符串起始位置,确保从开头就符合规则PO:固定前缀,必须以这两个字符开头.{1}:匹配恰好1个任意字符(对应预期中PO后的单个字符)V:固定分隔字符,必须出现在上述1个字符之后.{2}:匹配恰好2个任意字符(对应预期中V后的两个字符)B:固定分隔字符,必须出现在上述2个字符之后.{4}:匹配恰好4个任意字符(对应预期中B后的四个字符)$:匹配字符串结束位置,确保没有多余的后续字符
该规则会严格过滤掉以下不符合预期的情况:
- PO后包含2个及以上字符(如
POMN...) - V后包含3个及以上字符(如
V1234...) - B后包含5个及以上字符(如
B12345678...)
内容的提问来源于stack exchange,提问作者eikaz
相关产品推荐
相关产品推荐

