例如,如果 ID 是 1213,我想显示 **13。
问问题
806 次
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
将同样有效NUMBER
,VARCHAR
因此您可以节省一些转换时间。
连续地,您可以在函数操作上创建一个基于函数的索引regexp
来优化查询,例如(考虑到您总是希望只屏蔽 的前两个字符ID
) -
CREATE INDEX
mask_id
ON
table_name
(regexp_replace(id,'(.)2','**'));
于 2012-08-30T21:28:24.623 回答