1

入力文字列がString#StringまたはString#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 に答える