Sql server 名姓分离
如果原始字段看起来像paul@yates然后这个语法正确地识别出姓氏Sql server 名姓分离,sql-server,Sql Server,如果原始字段看起来像paul@yates然后这个语法正确地识别出姓氏 substring(surname,CHARINDEX('@',surname+'@')+1,LEN(name3)) 但是,如果字段是paul@b@耶茨:那么姓氏看起来像@b@yates. 我想去掉中间的字母,这样它就只去掉姓氏了。 有什么想法吗?你可以反转数组,将其拆分,直到找到第一个“@”,取下该部分,然后再次反转 如果这是java,那么应该有一个array.reverse函数,否则您可能需要自己编写它 您也可以将字
substring(surname,CHARINDEX('@',surname+'@')+1,LEN(name3))
但是,如果字段是paul@b@耶茨:那么姓氏看起来像@b@yates. 我想去掉中间的字母,这样它就只去掉姓氏了。
有什么想法吗?你可以反转数组,将其拆分,直到找到第一个“@”,取下该部分,然后再次反转 如果这是java,那么应该有一个array.reverse函数,否则您可能需要自己编写它 您也可以将字符串切成碎片,直到没有mor“@”符号为止,然后取最后一部分(子字符串应返回“-1”或其他内容),但我更喜欢我的第一个想法。您可以
;with T(name) as (
select 'paul@yates' union
select 'paul@b@yates'
)
select
right(name, charindex('@', reverse(name) + '@') - 1)
from T
>>
yates
yates
这里有一个例子
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
请重新考虑将名称字段分开存储。您将如何处理姓氏中的空格?少女的名字?前缀?后缀?你的数据到底为什么充满了
@
s?而且,如果需要单独处理名称部分,为什么不将它们存储为单独的列?