2013-10-02 1 views
2

У меня есть следующий сценарий John Doe [email protected] джон [email protected]SQL Server RTrim LTRIM и CHARINDEX

Я хочу далеко, что я могу обнаружить первое правое пространство и просто исключите все к так что я просто получаю адрес электронной почты человека. Итак: John Doe [email protected] должен быть [email protected] джон [email protected] должен быть [email protected]

Это то, что я есть

Declare @test varchar(50) 
Select @test = 'John Doe [email protected]' 
SELECT Right(@test, CHARINDEX(' ', @test)) 

Это только давая мне email.com!

спасибо.

ответ

3
Declare @test varchar(50) 
Select @test = 'John Doe [email protected]' 
SELECT RIGHT(@test, CHARINDEX(' ', REVERSE(@test)-1)) 

или более безопасный подход (если есть строки без пространства сепаратора):

Declare @test varchar(50) 
Select @test = '[email protected]' 
SELECT 
    CASE 
     WHEN CHARINDEX(' ', REVERSE(@test)) > 0 THEN RIGHT(@test, CHARINDEX(' ', REVERSE(@test))-1) 
     ELSE @test 
    END 
0

CHARINDEX возвращается 5, который является положением первого места в тестовой строке, между «Джоном» и «Доу».

Таким образом, право вернуло правильные 5 символов вашей тестовой строки, которые являются «l.com»