2012-10-04 87 views
1

我用這個case語句刪除多餘的空格時,纔會有一些

SELECT *, REPLACE(NAME,' ','@') AS NAME2 

導致錯過@測試@博客以@替換所有空白@@@@@@@@@@@@@@ (不同數量取決於名稱的長度@s的!

然後我用這個

select *, substring(Name2,0,charindex('@@',Name2)) as name3 

,然後給我想要的結果,例如MISS @測試@博客

刪除所有@名後的標誌

但是有些不給這個結果,它們是空的。這是因爲令人討厭的是,我讀過的工作表中的某些行在名稱後面沒有空格。

是否有我可以使用的case語句,因此它只在名稱後面刪除@符號,如果它們在第一位? 謝謝

回答

0

不太明白的問題,但如果問題是沒有空格一些名字後,你能不能做到這一點首先:

SELECT *, REPLACE(NAME+' ',' ','@') AS NAME2 

即,給蝙蝠上的所有名字添加一個空格?

+0

這就是問題是的。這仍然讓我在name3中留下了一些空的字段(請參見原文帖子) – user1296762

0

前幾天我有同樣的問題。

實際上,有一種快速的方法可以從開始和結束字符串中減去空格。在SQL Server中,您可以使用RTRIM和LTRIM。第一個從右側壓縮空間,第二個壓縮從左側壓縮。但是,如果在你的場景中,在字符串中間可能還存在多個空格,那麼你可以在SQL Server Central上查看這篇文章:http://www.sqlservercentral.com/articles/T-SQL/68378/

有腳本的作者詳細解釋了一個很好的解決方案對於這種情況。

+1

您必須註冊此網站? – user1296762

+0

是的。但是,這是我的東西,因爲它是一個很好的資源SQL Server – aledpardo

2

試試這個:

Declare @t table (name varchar(100),title varchar(100),forename varchar(100)) 
insert into @t 
values('a b c','dasdh dsalkdk asdhl','asd dfg sd') 


SELECT REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(name)),' ',' '+CHAR(7)),CHAR(7)+' ','') ,CHAR(7),'') AS Name, 

REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(title)),' ',' '+CHAR(7)),CHAR(7)+' ','') ,CHAR(7),'') AS title, 

REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(forename)),' ',' '+CHAR(7)),CHAR(7)+' ','') ,CHAR(7),'') AS forename 

FROM @t WHERE 
(CHARINDEX(' ',NAME) > 0 or CHARINDEX(' ',title) > 0 or CHARINDEX(' ',forename) > 0) 

SQL Fiddle Demo

+0

這是有效的,但我不能使用我的代碼的其餘部分來分離標題,姓氏,因爲@s不在那裏。你有語法嗎? – user1296762

+0

試試這個更新的答案 – AnandPhadke

+0

其中是從哪裏拉的名字?無效的列名稱'forename'。 – user1296762

2
select name2, left(name2,len(name2)+1-patindex('%[^@]%',reverse(name2)+'.')) 
from (
    SELECT *, REPLACE(NAME,' ','@') AS NAME2 
    from t 
) x; 

入住這SQL Fiddle

對於後人,樣品臺:

create table t (name varchar(100)); 
insert t select '[email protected]@[email protected]@@' 
union all select '@[email protected]' 
union all select 'name name hi ' 
union all select 'joe public' 
union all select '' 
union all select 'joe' 
union all select 'joe ' 
union all select null 
union all select ' leading spaces' 
union all select ' leading trailing ';