繁体   English   中英

REGEXP_LIKE-查找包含特殊字符的模式

[英]REGEXP_LIKE - Find pattern containing special character

我需要查找列值是否包含以下模式:

513-2400-23 - Valid
513-PBS-231 - Valid
521-PB-21 - Valid
52-12-21 - Valid
513-2321 - Not Valid

我已经尝试了以下版本和许多其他版本,但它们仅适用于一种情况,不适用于其他情况。

SELECT CASE
    WHEN REGEXP_LIKE('B12-23-43', '.-.-.') THEN 'Y'
    ELSE 'N' END FROM DUAL;

假设有效模式恰好需要两个破折号,那么这应该可以工作:

SELECT CASE
    WHEN REGEXP_LIKE('B12-23-43', '^[^-]+-[^-]+-[^-]+$') THEN 'Y'
    ELSE 'N' END FROM DUAL;

该模式要求字符串以一个或多个非破折号开头,然后有一个破折号,然后是更多的非破折号字符,最后是更多的非破折号字符。

sqlfiddle上的演示。

Select Case WHEN REGEXP_LIKE('B12-23-43', 
              '^[[:alnum:]]{1,}-[[:alnum:]]{1,}-[[:alnum:]]{1,}$') THEN 'Y'
       ELSE 'N' END 
FROM DUAL;

UPDATE

为了也涵盖此类情况: 544-445-PBBTS-24.3 ,可以如下扩展:

Select Case When 
   Regexp_Like('B12-23-43', 
   '^([[:alnum:]]{1,}-){2}[[:alnum:]]{1,}(-[[:alnum:]]{1,}\.[[:alnum:]]{1,})?$') 
   THEN 'Y'
   ELSE 'N' END 
FROM DUAL;
SELECT CASE
    WHEN (LEN('B12-23-43') - LEN(REPLACE('B12-23-43', '-', '')) = 2) THEN 'Y'
    ELSE 'N' END FROM DUAL;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM