请教这句sql的写法!急!
表1
zipcode stype
1301
1311
1321
1331
1392
1372
8602583
8602553
......
几百行,zipcode的长度不定
表二
phoneno
1378*******
1324*******
......
我想将表二中phoneno以表一中zipcode打头的行以stype替换掉,
替换后为:
表二
phoneno
28*******
14*******
这个update语句该怎么写呢?
小弟初学sql,请教各位
表1
zipcode stype
1301
1311
1321
1331
1392
1372
8602583
8602553
......
几百行,zipcode的长度不定
表二
phoneno
1378*******
1324*******
......
我想将表二中phoneno以表一中zipcode打头的行以stype替换掉,
替换后为:
表二
phoneno
28*******
14*******
这个update语句该怎么写呢?
小弟初学sql,请教各位
用存储过程吧
declare
cursor ub is select * from 表1;
begin
for tab in ub loop
update 表二
set phoneno=replace(phoneno, tab.zipcode, tab.stype)
where instr(phoneno, tab.zipcode)=1
end loop;
end;
UPDATE tab2
SET phoneno = (SELECT REPLACE (phoneno, zipcode, stype)
FROM tab1
WHERE INSTR (phoneno, zipcode) = 1)
呵,楼上的别折腾了,还是我的办法最好...
用replace不好,如果137137137,就替换成222了
还是截串拼串的好,虽然很麻烦,但是准确
晕...这我倒是没想到,你说这个replace为什么不多个参数表示替换第几个呢...
呵呵,等你下回加进去呢。:)
猫,快上qq,上回的导入问题还有事情要问你。
呵呵,晚了
:)
不过功夫不负有心人,偶又写了一个:)
UPDATE tab2
SET phoneno =
(SELECT stype
|| SUBSTR (phoneno, LENGTH (zipcode) + 1,
LENGTH (phoneno) + 1)
FROM tab1
WHERE INSTR (phoneno, zipcode) = 1);
呵呵,这个是经验,遇到多了自然会明白,因为不能用replace本来打算用ltrim()的,后来发现还是不对,为什么ltrim()替换的是第2个参数的集合,真奇怪……
SQL> select ltrim(13717311732137,137) from dual;
LTRIM(13717311732137,137)
----
2137
晕...原来已经有人写了
谢谢各位,吃午饭先,过会儿来看!
接分吧各位!