[英]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.