我们在table1.column1
中有以下数据A V John
B V S Shultz
S Hanks
K L C Gove, P S Murphy
我们需要删除一个字母单词之间的空格。转换后的数据应该是
AV John
BVS Shultz
S Hanks
KLC Gove, PS Murphy
是否可以编写sql查询正则表达式来清理整个列数据一次。请指导。感谢。
答案 0 :(得分:1)
您可能需要查看Using regular expression within a stored procedure
介绍如何在SQL Server客户端中使用正则表达式。
您也可以使用REPLACE
编写函数答案 1 :(得分:1)
使用T-SQL是可能的,但没有人会称它为美丽......
with cNames as (
select id=cast(id as tinyint), name=cast(name as varchar(50))
from (values (1, 'A V John'), (2, 'B V S Shultz'),
(3, 'S Hanks'), (4, 'K L C Gove, P S Murphy')
) n (id, name)
),
cNumbers as (
select n=row_number() over (order by (select 1))
from (values (1),(1),(1),(1)) a (n)
cross join (values (1),(1),(1),(1)) b (n)
cross join (values (1),(1),(1),(1)) c (n)
),
cNameparts as (
select c.id, n.n, c.name,
namepart=substring(c.name,n.n,charindex(' ',c.name+' ',n.n)-n.n)
from cNames c
inner join cNumbers n
on substring(' '+c.name,n.n,1) = ' '
and n.n < len(c.name)
)
select name=
(select case when len(namepart)>1 then ' ' else '' end +
namepart +
case when right(namepart,1)=',' then ' ' else '' end
from cNameparts np
where np.id = c.id
for xml path(''))
from cNames c
order by c.id;
答案 2 :(得分:1)
我正在寻找一个类似问题的答案,这似乎解决了我的问题
Tom Smith
Tom Smith
Tom Smith
replace(replace(replace(NAME,' ','<>'),'><',''),'<>',' ')
将基于this链接
成为汤姆史密斯答案 3 :(得分:0)
以下是匹配2个相邻单个字母之间空格所需的正则表达式,然后将其替换为""
(空白):
"(?<(^| )[a-zA-Z]) (?=[a-zA-Z]( |$))"
请注意,此模式不包含任何一个字母 - 它只是两者之间的空格。