元のフィールドが paul@yates のように見える場合、この構文は姓を正しく選択します
substring(surname,CHARINDEX('@',surname+'@')+1,LEN(name3))
ただし、フィールドが paul@b@yates の場合、姓は @b@yates のようになります。真ん中の文字を削除して、姓のみを選択するようにします。何か案は?
元のフィールドが paul@yates のように見える場合、この構文は姓を正しく選択します
substring(surname,CHARINDEX('@',surname+'@')+1,LEN(name3))
ただし、フィールドが paul@b@yates の場合、姓は @b@yates のようになります。真ん中の文字を削除して、姓のみを選択するようにします。何か案は?
あなたはできる;
;with T(name) as (
select 'paul@yates' union
select 'paul@b@yates'
)
select
right(name, charindex('@', reverse(name) + '@') - 1)
from T
>>
yates
yates
配列を逆にして、最初の「@」が見つかるまで分割し、その部分を取り、もう一度逆にすることができます。
これが Java の場合は、array.reverse 関数が必要です。それ以外の場合は、独自に作成する必要があります。
また、mor "@" 記号がなくなるまで文字列を分割して、最後の部分を取ることもできます (部分文字列は "-1" または何かを返す必要があります)。
これがあなたのための例です
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