簡體   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