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 的前两个id字符substr

这是一个 要演示的SQL Fiddle 。

于 2012-08-30T20:40:46.233 回答
0

如果您不想过多牺牲性能,可以使用掩盖前两个字符 -

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将同样有效NUMBERVARCHAR因此您可以节省一些转换时间。

连续地,您可以在函数操作上创建一个基于函数的索引regexp来优化查询,例如(考虑到您总是希望只屏蔽 的前两个字符ID) -

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