oracle中怎样替换指定长度的字符串

原数据如下bookidbookname391152622凤凰男爆笑飙高音(我们约会吧0911)381621060凤凰军事2013年3月6期.384988753凤凰野史20... 原数据如下
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
***槃
***********槃
************盘
*********一
*********二
*************策
展开
 我来答
daisytown8686
2015-06-26 · TA获得超过273个赞
知道答主
回答量:6
采纳率:0%
帮助的人:5.5万
展开全部

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;

太平岁年丰9
2014-06-18 · TA获得超过1231个赞
知道小有建树答主
回答量:1017
采纳率:100%
帮助的人:1108万
展开全部
select lpad(substr(bookname,-1),length(bookname)-1,'*') from tabname;

substr具体取多长,还要看你数据库字符集是什么,无非也就是1或者2
更多追问追答
追问

多谢,初步解决了替换问题,但是还要对最后一个字符进行判断。感觉还一点问题,'*'个数好像不对

追答
先解决*个数问题

select bookname,lpad(substr(bookname,-1),length(bookname)-1,'*'),length(bookname) from tabname;

结果贴上来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式