如果ID是1213,我想要show ** 13。
答案 0 :(得分:4)
如果是数字
select '**' || substr(to_char(id),3)
from my_table
或者,如果它已经是一个角色
select '**' || substr(id,3)
from my_table
使用Oracle连接运算符**
将||
连接到字符串的开头,并使用substr
删除id
的前两个字符。
这是一个SQL Fiddle来演示。
答案 1 :(得分: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
将在NUMBER
和VARCHAR
上运行,因此您可以节省一些转换时间。
连续地,你可以在regexp
函数操作上创建一个Function Based Index来优化查询(考虑到你总是只想掩盖ID
的前两个字符) -
CREATE INDEX
mask_id
ON
table_name
(regexp_replace(id,'(.)2','**'));