如何替换B字段内包含A字段文字的部分[200分]

flyfranker 2010-03-15 03:25:20
主帖请参见:http://topic.csdn.net/u/20100312/16/a1ea9633-456e-4608-8285-362a55aa4a7b.html
主帖里没人能解决问题,这里再开一帖,谁能解决问题200分都是你的,分数只给第一个正确答案,顶帖无分。

TEST表
A字段 varchar(50) 内容(客户姓名)
B字段 varchar(1000) 内容(其他字符...客户姓名...其他字符)

数据示意:
A字段 B字段
客户姓名1 其他字符...客户姓名1...其他字符...客户姓名1...
客户姓名2 其他字符...客户姓名2...其他字符...客户姓名2... (其他字符及客户姓名长度、重复次数无规律)

需要达到效果
B字段内容替换成(其他字符......其他字符)
数据示意:
A字段 B字段
客户姓名1 其他字符...其他字符...
客户姓名2 其他字符...其他字符...

如何将每个数据行内的B字段内与A字段内容相同的文字,无论数量多少,全部替换成空隔或其他字符?
这两个字段在同一张数据表内,大家提供答案的时候就不要写跨表命令了。。。

哎,第一次在SQL区提问,没想到居然三天了都没个满意的答案。
...全文
178 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaJiaBing 2010-03-15
  • 打赏
  • 举报
回复

----try 根据你给的例子:

declare @tb table (A nvarchar(50),B nvarchar(200))
insert into @tb select 'CSDN有限公司','由 张三 于 2008-9-22 将 [客户名称] 由 CSDN有限公司 改为 CSDN 有限公司; 由 李四 于 2009-10-12 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司;'
union all select 'SQL租凭公司','由 王五 于 2008-6-1 将 [客户名称] 由 SQL租凭公司 改为 SQL租凭公司; 由马六 于 2009-10-12 将 [客户名称] 由SQL租凭公司 改为 SQL租凭公司;'
update @tb set B=replace (b,a,' ')
select * from @tb





(2 行受影响)

(2 行受影响)
A B
-------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CSDN有限公司 由 张三 于 2008-9-22 将 [客户名称] 由 改为 CSDN 有限公司; 由 李四 于 2009-10-12 将 [客户名称] 由 改为 ;
SQL租凭公司 由 王五 于 2008-6-1 将 [客户名称] 由 改为 ; 由马六 于 2009-10-12 将 [客户名称] 由 改为 ;

(2 行受影响)


vipper23 2010-03-15
  • 打赏
  • 举报
回复
select *,REPLACE(b,a,' ') as  [log] from tb

a b log
------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL租赁公司 由 王五 于 2008-6-1 将 [客户名称] 由 SQL租赁公司 改为 SQL租赁公司; 由 马六 于 2009-10-12 将 [客户名称] 由 SQL租赁公司 改为 SQL租赁公司; 由 王五 于 2008-6-1 将 [客户名称] 由 改为 ; 由 马六 于 2009-10-12 将 [客户名称] 由 改为 ;
CSDN有限公司 由 张三 于 2008-9-22 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司; 由 李四 于 2009-10-12 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司


ws_hgo 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 flyfranker 的回复:]
update test set b=replace(b,a,'')

命令有效,结帖。
[/Quote]

搞了半天这么简单.........
sql_sf 2010-03-15
  • 打赏
  • 举报
回复
--怎么感觉还是replace()
if not object_id('tb') is null
drop table tb
Go
Create table tb([A] nvarchar(20),[B] nvarchar(1000))
insert tb select N'CSDN有限公司',N'由 张三 于 2008-9-22 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司; 由 李四 于 2009-10-12 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司; '
insert tb select N'SQL租赁公司',N'由 王五 于 2008-6-1 将 [客户名称] 由 SQL租赁公司 改为 SQL租赁公司; 由 马六 于 2009-10-12 将 [客户名称] 由 SQL租赁公司 改为 SQL租赁公司;'
select [A],
[B]=replace(B,A,'')
from tb
/*
A B
-------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CSDN有限公司 由 张三 于 2008-9-22 将 [客户名称] 由 改为 ; 由 李四 于 2009-10-12 将 [客户名称] 由 改为 ;
SQL租赁公司 由 王五 于 2008-6-1 将 [客户名称] 由 改为 ; 由 马六 于 2009-10-12 将 [客户名称] 由 改为 ;


*/
--小F-- 2010-03-15
  • 打赏
  • 举报
回复
哥们 这样才严禁
update test set b=raplace(b,a,'') where charindex(a,b)>0
--小F-- 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 flyfranker 的回复:]
update test set b=replace(b,a,'')

命令有效,结帖。
[/Quote]

....
flyfranker 2010-03-15
  • 打赏
  • 举报
回复
update test set b=replace(b,a,'')

命令有效,结帖。
andysun88 2010-03-15
  • 打赏
  • 举报
回复
zhangle861010 2010-03-15
  • 打赏
  • 举报
回复
不懂,只能帮顶了!。。。。。
flyfranker 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 andysun88 的回复:]
--不晓得是不是这样?
[/Quote]

我想最终命令里应该只有A和B的字段名,不应该有
'客户姓名1','其他字符...客户姓名1...其他字符...客户姓名1...
'客户姓名2','其他字符...客户姓名2...其他字符...客户姓名2...
这些具体的数据内容吧

数据是每行都不一样的,怎么可能在命令里体现。
flyfranker 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sql_sf 的回复:]
建议楼主贴点数据
你的示意数据看的不明白
[/Quote]

无奈,好吧,我再写一遍。


A字段内容:
行1 CSDN有限公司
行2 SQL租赁公司

B字段内容:
行1 由 张三 于 2008-9-22 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司; 由 李四 于 2009-10-12 将 [客户名称] 由 CSDN有限公司 改为 CSDN有限公司;
行2 由 王五 于 2008-6-1 将 [客户名称] 由 SQL租赁公司 改为 SQL租赁公司; 由 马六 于 2009-10-12 将 [客户名称] 由 SQL租赁公司 改为 SQL租赁公司;

需要效果:
log字段内容:
B字段内容:
行1 由 张三 于 2008-9-22 将 [客户名称] 由 改为 ; 由 李四 于 2009-10-12 将 [客户名称] 由 改为 ;
行2 由 王五 于 2008-6-1 将 [客户名称] 由 改为 ; 由 马六 于 2009-10-12 将 [客户名称] 由 改为 ;

每次从A字段取一行数据,在B字段内全文匹配查询,所有符合A字段该行数据的部分被删除或替换为其他固定文字即可。
andysun88 2010-03-15
  • 打赏
  • 举报
回复

--不晓得是不是这样?
if OBJECT_ID('TEST') is not null drop table TEST
GO
Create table TEST (A字段 varchar(50),B字段 varchar(1000))
insert into TEST select '客户姓名1','其他字符...客户姓名1...其他字符...客户姓名1...'
union all select '客户姓名2','其他字符...客户姓名2...其他字符...客户姓名2...'
GO
select A字段,REPLACE(B字段,A字段,'')as B字段 from TEST
永生天地 2010-03-15
  • 打赏
  • 举报
回复
update test
set B字段=REPLACE(B字段,A字段,'')
丰云 2010-03-15
  • 打赏
  • 举报
回复
update TEST set FILE_ID = replace(B字段,A字段,'abc')
永生天地 2010-03-15
  • 打赏
  • 举报
回复
SELECT REPLACE(B字段,A字段,'')
ws_hgo 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 flyfranker 的回复:]
引用 2 楼 fredrickhu 的回复:
如果是整个库 估计需要用到游标来遍历


我问过金蝶上海的开发总监,确实需要用到游标,难道上面的数据还不够明白吗?只是一张表,跟整个库没任何关系。
[/Quote]

金蝶上海的开发总监的数据库就一定牛吗?
sql_sf 2010-03-15
  • 打赏
  • 举报
回复
建议楼主贴点数据
你的示意数据看的不明白
flyfranker 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
如果是整个库 估计需要用到游标来遍历
[/Quote]

我问过金蝶上海的开发总监,确实需要用到游标,难道上面的数据还不够明白吗?只是一张表,跟整个库没任何关系。
mxc1225 2010-03-15
  • 打赏
  • 举报
回复
高佬192 2010-03-15
  • 打赏
  • 举报
回复
学习了 谢谢了
加载更多回复(3)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧