我必须更新很多数据。我有以下问题。
在数据库中,有一个[名称]字段,其中包含他们想做的各种格式的名称,如果有一个字符,后跟一个-然后另一个字符将这些字符折叠在一起
A-K Consulting LLC-> AK Consulting LLC
4-T fish鱼-> 4T fish鱼
但是L-Tech LLC将保持不变。
我尝试使用
replace(name,'%-%',char(10))
,但是在字段中留下了退格字符,不是理想的结果。
从未尝试过尝试删除连字符,然后仅将其折叠在列中间。任何人都有任何想法。
答案 0 :(得分:2)
这是一种解析名称,然后根据_-_
模式进行条件聚集的方法
完全公开:在大桌子上可能效果不佳。
示例
Declare @YourTable Table ([Name] varchar(50))
Insert Into @YourTable Values
('A-K Consulting LLC')
,('4-T Catfish')
,('L-Tech LLC')
Select A.Name
,B.*
From @YourTable A
Cross Apply (
Select S = Stuff((Select ' ' +case when RetVal like '_-_' then replace(RetVal,'-','') else RetVal end
From (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(A.Name,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B1
Order by RetSeq
For XML Path ('')),1,1,'')
) B
返回
Name S
A-K Consulting LLC AK Consulting LLC
4-T Catfish 4T Catfish
L-Tech LLC L-Tech LLC
编辑-如果仅发生1次---忘记了ltrim / rtrim
Select A.Name
,S = case when patindex('% _-_ %',' '+Name+' ')>0
then ltrim(rtrim(stuff(Name,patindex('% _-_ %',' '+Name+' ')+1,1,'')))
else Name
end
From @YourTable A
EDIT2-基于Jeroen的见识
Select A.Name
,S = ISNULL(STUFF([Name], NULLIF(PATINDEX('% _-_ %', ' ' + [Name] + ' '), 0) + 1, 1, ''), [Name])
From @YourTable A
答案 1 :(得分:0)
尝试一下:
SELECT [Name],REPLACE([Name],'-',char(10)) FROM Table1;