![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
oracle中怎样替换指定长度的字符串
bookid bookname
391152622 凤凰男爆笑飙高音(我们约会吧0911)
381621060 凤凰军事2013年3月6期.
384988753 凤凰野史2013年7月4期.
385303732 凤凰军事2013年8月1期.
393929677 凤凰军事.2014解密MH370
369318763 凤凰涅槃
370217155 高位截瘫副局长的凤凰涅槃
368222355 介绍郭沫若的诗“凤凰涅盘”
393220895 凤凰名嘴吴小莉(一)
393220730 凤凰名嘴吴小莉(二)
393055684 凤凰军事.2014两会新政策
期望结果: (保留最后一位字符,前面都用*代替,如果字符串最后一个字符为特殊符号,则取前一位)
******************1
*************期
*************期
*************期
***************0
***槃
***********槃
************盘
*********一
*********二
*************策 展开
WITH tabname AS (
SELECT
'391152622' bookid ,'凤凰男爆笑飙高音(我们约会吧0911)' bookname from dual union all
select '381621060','凤凰军事2013年3月6期.' from dual union all
select '384988753','凤凰野史2013年7月4期.' from dual union all
select '385303732','凤凰军事2013年8月1期.' from dual union all
select '393929677','凤凰军事.2014解密MH370' from dual union all
select '369318763','凤凰涅槃' from dual union all
select '369318763','凤凰涅槃*' from dual union all --添加测试数据
select '369318763','凤凰涅槃**' from dual union all --添加测试数据
select '369318763','凤凰涅槃0' from dual union all --添加测试数据
select '370217155','高位截瘫副局长的凤凰涅槃' from dual union all
select '368222355','介绍郭沫若的诗“凤凰涅盘”' from dual union all
select '393220895','凤凰名嘴吴小莉(一)' from dual union all
select '393220730','凤凰名嘴吴小莉(二)' from dual union all
select '393055684','凤凰军事.2014两会新政策' from dual)
SELECT bookname,lpad(substr(bookname, -1), length(bookname) - 1, '*') 楼上结果,
rtrim(lpad('$#$',LENGTH(Regexp_replace(bookname, '[[:punct:]]+$', '')) + 2,'*'),'$#$') ||substr(Regexp_replace(bookname, '[[:punct:]]+$', ''), -1) 我的结果
FROM tabname;
substr具体取多长,还要看你数据库字符集是什么,无非也就是1或者2
先解决*个数问题
select bookname,lpad(substr(bookname,-1),length(bookname)-1,'*'),length(bookname) from tabname;
结果贴上来