0

例 ID が 1213 の場合、**13 を表示します。

4

2 に答える 2

4

数字だと

select '**' || substr(to_char(id),3)
  from my_table

または、すでにキャラクターの場合

select '**' || substr(id,3)
  from my_table

これ**は、Oracle 連結演算子を使用して文字列の先頭に連結し、 usingの||最初の 2 文字を削除します。idsubstr

デモ用のSQL Fiddleを次に 示します。

于 2012-08-30T20:40:46.233 に答える
0

パフォーマンスをあまり犠牲にしたくない場合は、最初の2文字をマスクするために-

SQL> select regexp_replace('1213','(.)2','**') from dual; --if VARCHAR

MASKED
------------
**13

SQL> select regexp_replace(1213,'(.)2','**') from dual;  --if NUMBER

MASKED
------------
**13

REGEXP_REPLACEは同様に機能NUMBERするVARCHARため、変換時間を節約できます。

連続して、関数操作で関数ベースのインデックスregexpを作成して、次のようにクエリを最適化できます (常に最初の 2 文字のみをマスクすることを考慮してID) -

CREATE INDEX
   mask_id
ON
   table_name
 (regexp_replace(id,'(.)2','**'));
于 2012-08-30T21:28:24.623 に答える