0

特定のフィンガープリントに一致するものをすべて見つけようとしていますが、Oracle のワイルドカードはそれほど正確ではありません。

そのフィンガープリントは次のようになります: WHERE symbol LIKE '%_####@' ESCAPE '\'

前に何が来てもかまいません (% ワイルドカード)
次はアンダースコア ('\' でエスケープ)
次に 4 つの数字 (#)
、最後に A ~ Z (@) の文字

翻訳機能を使用していくつかのものを見つけましたが、機能させることができませんでした。現在、正規表現を調査していますが、これまで使用したことがありません。私はそれらが何であるか、そして私の問題を解決するためにどのように機能するかを理解しようとしています.

4

1 に答える 1

2

LIKE ではなく、正規表現を使用したいようです。「指紋」は正規表現によってキャプチャされたように見えるため、指紋が存在するかどうか (および文字列内の位置) を判断するために[_][[:digit:]]{4}[A-Z]使用できます。regexp_instrこの場合、文字列 '_1234B' は最初の文字列のフィンガープリントで、位置 7 から始まります。

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select 'sb1234_1234Bdelta' str from dual union all
  3    select 'no match' from dual
  4  )
  5  select str,
  6         regexp_instr( str, '[_][[:digit:]]{4}[A-Z]' )
  7    from x
  8*  where regexp_instr( str, '[_][[:digit:]]{4}[A-Z]' ) > 0
SQL> /

STR               REGEXP_INSTR(STR,'[_][[:DIGIT:]]{4}[A-Z]')
----------------- ------------------------------------------
sb1234_1234Bdelta                                          7
于 2012-05-04T16:02:47.233 に答える