sql >> データベース >  >> RDS >> Oracle

OracleSQLを使用した文字列内の特定の文字列の取得

    regexp_substrを使用できます。 入力データを行に分割してから、関連する文字列を探します。例:

    SQL> SELECT regexp_substr(line, 'aXYZApple[^,]*') subtxt
      2    FROM (SELECT regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line
      3             FROM dual
      4           CONNECT BY LEVEL <= length(:x) - length(REPLACE(:x, '|', '')))
      5   WHERE regexp_substr(line || ',', '[^,]*,', 1, 2) = 'OU=Managed,'
      6     AND line LIKE '%aXYZApple%';
    
    SUBTXT
    --------------------------------------------------------------------------------
    aXYZApple-Au
    aXYZApple-Readonly
    aXYZApple-Write
    

    ここに少し説明があります。クエリを段階的に実行する必要があります。

    クエリの内部は、データをループします(|ごとに) ):

    SQL> SELECT regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line
      2    FROM dual
      3  CONNECT BY LEVEL <= length(:x) - length(REPLACE(:x, '|', ''));
    
    LINE
    --------------------------------------------------------------------------------
     CN=aXYZApple-Au,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
     CN=31107427,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=
     CN=ea90045052,OU=Groups,OU=eProfile,DC=core,DC=dir,DC=abc,DC=com |
     CN=S0901448,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=
     CN=00900887,OU=Distribution Lists,OU=Shared Mailboxes,DC=core,DC=dir,DC=abc,DC=
     CN=NSMMMM,OU=LRP,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
     CN=aXYZApple-Readonly,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
     CN=WWSWW-Au,OU=LRP,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
     CN=aLogical_RW,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
     CN=aXYZApple-Write,OU=Managed,OU=Groups,DC=core,DC=dir,DC=abc,DC=com |
    

    次に、OU=Managedをループします 2番目の位置の文字列:

    SQL> SELECT regexp_substr(line || ',', '[^,]*,', 1, 2) second_part
      2    FROM (SELECT regexp_substr(:x, '[^|]*\|', 1, rownum + 1) line
      3             FROM dual
      4           CONNECT BY LEVEL <= length(:x) - length(REPLACE(:x, '|', '')));
    
    SECOND_PART
    --------------------------------------------------------------------------------
    OU=Managed,
    OU=Distribution Lists,
    OU=Groups,
    OU=Distribution Lists,
    OU=Distribution Lists,
    OU=LRP,
    OU=Managed,
    OU=LRP,
    OU=Managed,
    OU=Managed,
    

    最後に、最後のregexp_substrで関連するパーツを選択します 。




    1. Oracleバルクコレクトに相当するPostgreSQL

    2. 配列から文字列への変換エラーSymfony3

    3. SQLLIKE句でのSqlParameterの使用が機能しない

    4. Webアプリケーションを5日間実行するとパフォーマンスが低下しますが、ボトルネックを特定するにはどうすればよいですか?