分隔姓氏姓氏

时间:2012-10-02 10:30:17

标签: sql-server

如果原始字段看起来像paul @ yates,则此语法正确选择姓氏

  substring(surname,CHARINDEX('@',surname+'@')+1,LEN(name3))

然而,如果该字段是paul @ b @ yates,则姓氏看起来像@ b @ yates。我希望丢弃中间字母,这样它才会选择姓氏。 任何想法?

3 个答案:

答案 0 :(得分:1)

你可以;

;with T(name) as (
    select 'paul@yates' union
    select 'paul@b@yates'
)
select 
    right(name, charindex('@', reverse(name) + '@') - 1) 
from T

>>

yates
yates

答案 1 :(得分:0)

你可以反转数组,拆分它直到找到第一个“@”,取出那部分并再次反转。

如果这是java,则应该有一个array.reverse函数,否则你可能需要自己编写它。

你也可以将字符串切成碎片,直到没有mor“@”符号,然后取最后一部分(子串应返回“-1”或其他东西),但我更喜欢我的第一个想法。

答案 2 :(得分:0)

以下是您的示例

declare @t table (name varchar(max));
insert @t select
'john' union all select
'john@t@bill' union all select
'joe@public';

select firstname=left(name,-1+charindex('@',name+'@')),
       surname=case when name like '%@%' then
         stuff(name,1,len(name)+1-charindex('@',reverse(name)+'@'),'')
         end
from @t;

-- results

FIRSTNAME   SURNAME
john    (null)
john    bill
joe public