日期:2014-05-16  浏览次数:20437 次

SQL值替换
表名:Agent_Call
列名:Called_NUM
值:
18102261555
2018102162222
2018912345678
2018814567892

如何批量去掉前面包含20的值,我需要得到一张不包含20的Called_NUM。

业务逻辑是这样的:
每天我会从一个呼叫系统中,导出昨天的被叫号码(Called_NUM),所以每天都会有前置是20的值出现,
现在已经存在DB中有一年的数据,如何一个SQL更新所有前置是20的值呢?

------解决方案--------------------
引用:
刚才给你的代码把这里变更下:where 
            Agent_Call like '20%'
变成这样:where 
Called_NUM like '20%'
简易测试下:

create table Agent_Call (Called_NUM varchar(100))

insert into Agent_Call
select '18102261555' union
select '2018102162222' union
select '2018912345678' union
select '2018814567892'

update 

set 
a.Called_NUM=Temp_linshi.Called_NUM_2 
from 
Agent_Call a,
(
select 
Called_NUM,
substring(Called_NUM,3,len(Called_NUM)) as Called_NUM_2 
from 
Agent_Call 
where 
Called_NUM like '20%'
) Temp_linshi

where 
a.Called_NUM=Temp_linshi.Called_NUM


结果
Called_NUM
18102261555
18102162222
18814567892
18912345678


如果在非开头部位出现了20怎么办呢?比如:2018102162022 或者18102061555
------解决方案--------------------

UPDATE [Agent_Call]
SET [Called_NUM]=REPLACE([Called_NUM],'20','')