删除SQL Server表数据中的空格

时间:2011-07-01 03:43:19

标签: sql sql-server regex

我们在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查询正则表达式来清理整个列数据一次。请指导。感谢。

4 个答案:

答案 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]( |$))"

请注意,此模式不包含任何一个字母 - 它只是两者之间的空格。