如果输入字符串的格式为 String#String 或 String #String; String#String 其中String可以包含任意数量的大写字母,下划线,则它应该返回 Y 否则它应该返回 N 。
如何在单个SQL查询中使用PL / SQL中的Regex来完成? (P.S.不使用PL / SQL程序/功能。)
示例: - 如果输入字符串是“CASISA #Y”或“INVOPT#LUMREG; LUMSUM#2000; REGSUM#8000”,则'Y'应为返回其他'N'应该返回。 注意 - 请不要构建一个PL / SQL过程来实现这一点,而应该只是一个使用oracle正则表达式函数的SQL。 *
答案 0 :(得分:2)
您可以使用regexp_like
正则表达式函数来获得所需的结果:
with t1(col) as(
select 'CASISA#Y' from dual union all
select 'INVOPT#LUMREG;LUMSUM#2000;REGSUM#8000' from dual union all
select 'CASISA#Y;' from dual union all -- extra data
select 'INVOPT#LUMREG;LUMSUM#2000;#8000' from dual -- extra data
)
select col
, case
when regexp_like(col, '^(\w+#\w+;)*(\w+#\w+){1}$')
then 'Y'
else 'N'
end as "Y/N"
from t1
结果:
COL Y/N
--------------------------------------------------
CASISA#Y Y
INVOPT#LUMREG;LUMSUM#2000;REGSUM#8000 Y
CASISA#Y; N
INVOPT#LUMREG;LUMSUM#2000;#8000 N