0

Oracle にテーブルがあり、列の 1 つに \ の形式の UserId が含まれています。たとえば、「fin\george」、「sales\andy」など。REGEXP_SUBSTR 関数を使用して UserId からのみを取得するにはどうすればよいですか。つまり、「george」、「andy」などだけを取得したいのです。SUBSTR 関数を使用して目的の結果を達成しましたが、この場合は REGEXP_SUBSTR を使用したいと考えています。

私はこれをやってみました:

SELECT REGEXP_SUBSTR('fin\george','\[^\]+,') "UserName" FROM DUAL;

しかし、それは役に立ちませんでした。誰でも私の間違いを指摘できますか?

4

5 に答える 5

4

後方参照付きでを使用したいと思いregexp_replaceます。前後の文字はすべて\アルファベットだと思います。数字を許可する場合は、[[:alnum:]]ではなくを使用することをお勧めします[[:alpha::]

  1* SELECT REGEXP_replace('fin\george',
                           '([[:alpha:]]+\\)([[:alpha:]]+)$', 
                           '\2') "UserName" 
       FROM DUAL
SQL> /

UserNa
------
george
于 2012-06-20T14:33:22.140 に答える
1
select regexp_replace( 'fin\george', '.*\\', null ) from dual;

戻りますgeorge

正規表現は、\(エスケープされた) が後に続く任意の文字と、可能な限り (貪欲に) 一致します。したがって、最終的なものまですべて一致します\。次に、一致する文字列が に置き換えられnullます。

nullがデフォルトなので

select regexp_replace('fin\george', '.*\\' ) from dual;

同じことをします

同じ式で、パス名の末尾からファイル名を抽出できます。

select regexp_replace ('fin\fin2\fin3\fin4\george', '.*\\' ) from dual;

また、戻りgeorgeます。

于 2012-08-17T11:41:32.803 に答える
0

エスケープを使用する必要があります:\の代わりに\\

于 2012-06-20T14:26:32.063 に答える