[英]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;
該模式要求字符串以一個或多個非破折號開頭,然后有一個破折號,然后是更多的非破折號字符,最后是更多的非破折號字符。
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.