2013-10-04 28 views
0

我有這樣的場景:SQL Server的LTRIM或子獲得的電子郵件地址唯一

John Doe [email protected] 
John [email protected] 

我想離開那隻能分析出此如下:

John Doe 
John 

換句話說,除去僅限電子郵件地址。

我已經試過這樣:

SELECT 
       (CASE WHEN CHARINDEX(‘ ‘, REVERSE(column1)) > 0 THEN Left(column1, CHARINDEX(‘ ‘, REVERSE(column1)) – 1) 
       ELSE column1 
       END) AS column1 
FROM Book1 
+0

我用我試過的東西編輯過帖子。謝謝邁克爾。 –

+0

http://stackoverflow.com/questions/19146268/sql-server-rtrim-ltrim-and-charindex/19146361#19146361 –

回答

1

你在正確的軌道上......只要加入len函數拖放 「減1」

SELECT (CASE WHEN CHARINDEX(' ', REVERSE(column1)) > 0 THEN Left(column1, len (column1) - CHARINDEX(' ', REVERSE(column1))) 
       ELSE column1 
       END) AS column1 
FROM Book1 
0
DECLARE @Str VARCHAR(MAX) = 'John Doe [email protected]' 


SELECT LEFT(@Str, LEN(@Str) - LEN(REVERSE(SUBSTRING(REVERSE(@Str), 1, CHARINDEX(' ', REVERSE(@Str)) - 1)))) 
1
DECLARE @MyTable TABLE 
(
    ID  INT IDENTITY(1,1) PRIMARY KEY, 
    Col1 NVARCHAR(200) NOT NULL 
); 
INSERT @MyTable(Col1) VALUES(N'John Doe [email protected]'); 
INSERT @MyTable(Col1) VALUES(N'John [email protected]'); 
INSERT @MyTable(Col1) VALUES(N'[email protected]'); 
INSERT @MyTable(Col1) VALUES(N' [email protected]'); 

SELECT *, 
    CASE 
     WHEN oa.SpaceIndex > 0 THEN RIGHT(t.Col1, oa.SpaceIndex - 1) 
     ELSE t.Col1 
    END AS EmailAddress, 
    CASE 
     WHEN oa.SpaceIndex > 0 THEN LEFT(t.Col1, LEN(t.Col1) - oa.SpaceIndex) 
     -- or WHEN oa.SpaceIndex > 0 THEN NULLIF(LEFT(t.Col1, LEN(t.Col1) - oa.SpaceIndex), '') 
    END AS FullName 
FROM @MyTable t 
OUTER APPLY(SELECT CHARINDEX(N' ', REVERSE(t.Col1)) AS SpaceIndex) oa 

結果:

ID Col1      SpaceIndex EmailAddress  FullName 
-- -------------------------- ---------- ----------------- -------- 
1 John Doe [email protected] 18   [email protected] John Doe 
2 John [email protected]  18   [email protected] John 
3 [email protected]   0   [email protected] NULL 
4 [email protected]   18   [email protected] 
相關問題