字符串前后替换

[复制链接]
查看11 | 回复7 | 2007-1-6 21:14:12 | 显示全部楼层 |阅读模式
现有表 t_per 内有两个字段pername 与 revpername 这两个字段的字符内容相反如:pername为abcd  则revpername 为dcba,现要有把pername字段的前两个字符为ab的全部替换成yi ,同样REVPERNAME的内容替换为dciy,这样的数有大约几十万的数据,请问该如何写,请教老大们帮忙看看!先谢了!
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
[PHP]
SQL> select * from t_per;
PERNAMEREVPERNA
-------- --------
abcd dcba
Elapsed: 00:00:00.00
SQL> select decode(substrb(pername,1,2),'ab','yi'||ltrim(pername,'ab'),pername),
2 decode(substrb(revpername,-2,2),'ba',rtrim(revpername,'ba')||'iy',revpername)
3from t_per;
DECODE(SUBST DECODE(SUBST
------------ ------------
yicd dciy
Elapsed: 00:00:00.00
SQL>
[/PHP]
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
如果是10G,还可以用正则表达式
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
最初由 atgc 发布
[B][PHP]
SQL> select * from t_per;
PERNAMEREVPERNA
-------- --------
abcd dcba
Elapsed: 00:00:00.00
SQL> select decode(substrb(pername,1,2),'ab','yi'||ltrim(pername,'ab'),pername),
2 decode(substrb(revpername,-2,2),'ba',rtrim(revpername,'ba')||'iy',revpername)
3from t_per;
DECODE(SUBST DECODE(SUBST
------------ ------------
yicd dciy
Elapsed: 00:00:00.00
SQL>
............
[/PHP] [/B]


更好的方法是,在where中限制必须以ab开头
where pername like 'ab%'
这样,如果上面有索引,还能充分利用到


回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
最初由 lastwinner 发布
[B]

更好的方法是,在where中限制必须以ab开头
where pername like 'ab%'
这样,如果上面有索引,还能充分利用到

[/B]

倒也是的,我也是想着写的,应该还有更好的方法吧
用REGEXP要好一些的,如果是10G
REGEXP_REPLACE
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
好的,我试试,谢谢!
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
学习一下
回复

使用道具 举报

千问 | 2007-1-6 21:14:12 | 显示全部楼层
如果这种情况:update t_personaltel set namecode=decode(substrb(namecode,1,2),'YZ','YI'||ltrim(namecode,'YZ'),namecode),
revnamecode=decode(substrb(revnamecode,-2,2),'ZY',rtrim(revnamecode,'ZY')||'IY',revnamecode)
where county='yi' and namecode like 'YZZ%' and revnamecode like '%ZY' and tel='3861852'
测试后发现把YZZABAO这样的字会变成YIABAO,多删除了一个Z字母,同样revnamecode 也被多去除了一个Z 字母!还请老大们再看看!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行