我需要查找列值是否包含以下模式:
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;
答案 0 :(得分:2)
假设有效模式只需要两个破折号,这应该有效:
SELECT CASE
WHEN REGEXP_LIKE('B12-23-43', '^[^-]+-[^-]+-[^-]+$') THEN 'Y'
ELSE 'N' END FROM DUAL;
模式要求字符串以一个或多个非短划线开头,然后是短划线,然后是一些非短划线字符,最后是一些非短划线字符。
答案 1 :(得分:2)
Select Case WHEN REGEXP_LIKE('B12-23-43',
'^[[:alnum:]]{1,}-[[:alnum:]]{1,}-[[:alnum:]]{1,}$') THEN 'Y'
ELSE 'N' END
FROM DUAL;
<强>更新强>
还要涵盖此类案例: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;
答案 2 :(得分:0)
SELECT CASE
WHEN (LEN('B12-23-43') - LEN(REPLACE('B12-23-43', '-', '')) = 2) THEN 'Y'
ELSE 'N' END FROM DUAL;