单个SQL查询中的正则表达式

时间:2013-01-22 17:04:31

标签: sql regex oracle

如果输入字符串的格式为 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。 *

1 个答案:

答案 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

SQLFiddle example