需对一表中的数据进行修改
如:
旅游运动 78M294A
改为
78M294A 旅游运动
其中有很多钟情况
1:中间可能不止一个空格
2:“78M294A”后面可能也有空格,一个或多个
3:“旅游运动”前面也可能有空格,一个或多个
4:“旅游运动 78M294A”中间可能有字符或则汉字
如:
“旅游运动 222 78M294A” 或则 “旅游运动 JJJ 78M294A”
在或则“旅游运动 运动 78M294A”
如何才能做到一次修改?得到结果
如:
旅游运动 78M294A
改为
78M294A 旅游运动
其中有很多钟情况
1:中间可能不止一个空格
2:“78M294A”后面可能也有空格,一个或多个
3:“旅游运动”前面也可能有空格,一个或多个
4:“旅游运动 78M294A”中间可能有字符或则汉字
如:
“旅游运动 222 78M294A” 或则 “旅游运动 JJJ 78M294A”
在或则“旅游运动 运动 78M294A”
如何才能做到一次修改?得到结果
update 表 set 字段=replace(字段,'78M294A','旅游运动')
update 表 set 字段=replace(replace(replace(字段,'78M294A','疋),'旅游运动','78M294A'),'疋','旅游运动')
不过要确保字段中不存在字符"疋"
同样要得到78M294A 旅游运动
这样的结果
2:“78M294A”后面可能也有空格,一个或多个
3:“旅游运动”前面也可能有空格,一个或多个
4:“旅游运动 78M294A”中间可能有字符或则汉字
如:
“旅游运动 222 78M294A” 或则 “旅游运动 JJJ 78M294A”
在或则“旅游运动 运动 78M294A”第一种数据清理
WHILE EXISTS (SELECT 1 FROM table1 WHERE PATINDEX(col1,'% %')>0)
UPDATE table1
SET col1=REPLACE(col1,Space(2),Space(1))
WHERE PATINDEX(col1,'% %')>0第二三种数据清理
UPDATE table1
SET col1=RTrim(LTrim(col))第四种数据不知道有什么规律.
旅游运动 222 78M294A
同样要得到78M294A 旅游运动
这样的结果
==========================那是不是可以这样理解:
数据分三块的时候去掉中间那块,然后把第一块跟第三块对调?
stuff(字段,charindex('78M294A',字段),charindex('旅游运动',字段)+1-charindex('78M294A',字段),' ')
旅游运动 78M294A
信息,我只是说的一种,里面有很多不同的信息
我以前写过一个语句
但不能把问题全部都解决掉
declare @r varchar(30)
set @r='wwww kkkk'
select @r,ltrim(substring(@r,len(@r)-charindex(' ',@r)-1,len(@r)))+' '+left(@r,charindex(' ',@r)-1)
update 表 set 字段=replace(replace(replace(字段,'78M294A','疋),'旅游运动','78M294A'),'疋','旅游运动')
再执行
select stuff(字段,charindex('78M294A',字段)+len('78M294A'),charindex('旅游运动',字段)-len('78M294A')-charindex('78M294A',字段),' ')可以试一下
insert @t select '旅游运动 78M294A'
union all select '旅游运动 44 78M294A'
union all select '旅游运动 我们 78M294A'
union all select '旅游运动 675 78M294A'
union all select '78M294A 旅游运动'
union all select '78M294A 88 旅游运动'update @t set string=replace(replace(replace(string,'78M294A','疋'),'旅游运动','78M294A'),'疋','旅游运动') where charindex('78M294A',string)>charindex('旅游运动',string)
--select * from @t
select stuff(string,charindex('78M294A',string)+len('78M294A'),charindex('旅游运动',string)-len('78M294A')-charindex('78M294A',string),' ') from @t--结果
----------------------
78M294A 旅游运动
78M294A 旅游运动
78M294A 旅游运动
78M294A 旅游运动
78M294A 旅游运动
78M294A 旅游运动(所影响的行数为 6 行)
returns varchar(8000)
as
begin
declare @tt varchar(8000),@seek int,@len int
set @seek = 1
while charindex(' ',@dd,@seek) <> 0
begin
set @len = len(substring(@dd,@seek,charindex(' ',@dd,@seek) - @seek))
if @seek = 1
begin
set @tt = substring(@dd,@seek,@len)
end
else
begin
set @tt = substring(@dd,@seek,@len) + ' ' + @tt
end
--insert into #ta select substring(@dd,@seek,@len)
set @seek = charindex(' ',@dd,@seek) + 1
end
if LEN(@dd) - @seek > 0
begin
--insert into #ta select substring(@dd,@seek,LEN(@dd) - @seek + 1)
set @tt = substring(@dd,@seek,LEN(@dd) - @seek + 1) + isnull(' ' + @tt,'')
end
return @tt
end
go
select dbo.rata('11 32 44')drop function rata
returns varchar(8000)
as
begin
declare @tt varchar(8000),@seek int,@len int
set @seek = 1
while charindex(' ',@dd,@seek) <> 0
begin
set @len = len(substring(@dd,@seek,charindex(' ',@dd,@seek) - @seek))
if @seek = 1
begin
set @tt = substring(@dd,@seek,@len)
end
else
begin
set @tt = substring(@dd,@seek,@len) + ' ' + @tt
end
--insert into #ta select substring(@dd,@seek,@len)
set @seek = charindex(' ',@dd,@seek) + 1
end
if LEN(@dd) - @seek > 0
begin
--insert into #ta select substring(@dd,@seek,LEN(@dd) - @seek + 1)
set @tt = substring(@dd,@seek,LEN(@dd) - @seek + 1) + isnull(' ' + @tt,'')
end
return @tt
end
godeclare @t table(string varchar(8000))
insert @t select '旅游运动 78M294A'
union all select '旅游运动 44 78M294A'
union all select '旅游运动 我们 78M294A'
union all select '旅游运动 675 78M294A'
union all select '78M294A 旅游运动'
union all select '78M294A 88 旅游运动 23 adf 123'select dbo.rata(string) from @tdrop function rata
78M294A 44 旅游运动
78M294A 我们 旅游运动
78M294A 675 旅游运动
旅游运动 78M294A
123 adf 23 旅游运动 88 78M294A
insert @t select '旅游运动 78M294A'
union all select '旅游运动 旅游44 78M294A'
union all select '旅游运动 我们 78M294A'
union all select '旅游运动 675 78M294A'
union all select '78M294A 旅游运动'
union all select '78M294A 旅游 88 旅游运动 23 adf 123'
union all select '78M294A 88 旅游1运动 23 adf 123'select * from @tupdate @t set string=case when (string like '%旅游运动%78M294A%' or string like '%78M294A%旅游运动%') then '78M294A 旅游运动' else null endselect * from @t
旅游运动 78M294A
中间没有空格也没有其它什么字符的情况又怎么处理
如:
旅游运动78M294A
要改为
78M294A 旅游运动
又如何处理?
一点思路:
判断第一个字符是什么? 如果是7就取左边7位和右边八们 组合成新的串 否则 就取右边八位 和左边七位 组合成新的串 用if 或 case 语句就行了。
具体的实现你就自己试一下吧。
一点思路:
判断第一个字符是什么? 如果是7就取左边7位和右边八们 组合成新的串 否则 就取左边八位 和右边七位 组合成新的串 用if 或 case 语句就行了。
具体的实现你就自己试一下吧。