如何在oracle查询中显示字符串的前两个字符?

时间:2012-08-30 20:38:15

标签: oracle

如果ID是1213,我想要show ** 13。

2 个答案:

答案 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将在NUMBERVARCHAR上运行,因此您可以节省一些转换时间。

连续地,你可以在regexp函数操作上创建一个Function Based Index来优化查询(考虑到你总是只想掩盖ID的前两个字符) -

CREATE INDEX
   mask_id
ON
   table_name
 (regexp_replace(id,'(.)2','**'));