1

如果输入字符串的格式为String#StringString#String;String#String,其中 String 可以有任意数量的大写字母、下划线,那么它应该返回Y否则它应该返回N

如何仅在单个 SQL 查询中使用 PL/SQL 中的正则表达式来完成?
(PS 不使用 PL/SQL 过程/函数。)

示例:- 如果输入字符串是“CASISA#Y”“INVOPT#LUMREG;LUMSUM#2000;REGSUM#8000”,则应返回“Y”,否则应返回“N”。注意 - 请不要构建 PL/SQL 过程来完成此操作,而应该只是使用 oracle 正则表达式函数的 SQL。*

4

1 回答 1

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 示例

于 2013-01-22T17:57:45.010 回答