2011-07-01 29 views
2

我們在table1.column1在SQL Server表中的數據刪除空格

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查詢正則表達式來清理整個列數據一次。請指導。謝謝。

+1

在SQL Server中得到的正則表達式的功能,至少在2008 R2中,您必須使用SQLCLR有

Tom Smith Tom Smith Tom Smith replace(replace(replace(NAME,' ','<>'),'><',''),'<>',' ') 

都將是湯姆·史密斯。可悲的是。 –

+0

@Jon有一個鏈接:) http://weblogs.sqlteam.com/jeffs/archive/2007/04/27/SQL-2005-Regular-Expression-Replace.aspx – niktrs

+0

@Jon這個事實仍然是在Denali中爲真 - 沒有本地RegEx。 –

回答

0

這裏寫一個函數就是你需要匹配兩個相鄰的單個字母之間的空間正則表達式,那麼你會替換成""(空白):

"(?<(^|)[a-zA-Z]) (?=[a-zA-Z](|$))" 

請注意,此圖案不包含任何一個字母 - 只是它們之間的空格。

+0

使用上面的正則表達式檢查鏈接http://stackoverflow.com/questions/150977/perform-regex-replace-in-an-sql-query – niktrs

+0

嗨波希米亞,感謝您的幫助。我可以知道如何使用上述內容來替換2個相鄰單個字母之間的空格。謝謝。 – user374760

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; 
+0

+1'VALUES'代替'UNION'有趣的使用 –

+0

你好Manfred先生,謝謝你的代碼。我試了一下,主要是工作,沒有像「Rao C S R」,「Lawrence D Souza」這樣的案例。在第一種情況下,它將變爲「RaoCS R」,在第二種情況下變爲「LawrenceD Souza」。應該是「Rao CSR」和「Lawrence D Souza」。你的代碼有很多邏輯,不知道在哪裏改變:)請幫助。 – user374760

+0

我認爲,代碼適用於單字母在前面的情況,但如果它們在中間或在右端則失敗。謝謝。 – user374760

1

我一直在尋找一個答案,一個類似的問題,我已經和這似乎像它解決了我的問題,我基於this鏈接