@の位置を取得して、その前後を取得すればOK。
/*サンプルテーブル*/
with sampleTable as (
select 'hoge@example.com' as mailAddress union
select 'hoge2@example.com' union
select 'invalid_address'
)
select
mailAddress as [メールアドレス],
/*@より前の値を取得する*/
substring(mailAddress, 0, charindex('@',mailAddress)) as [ローカルパート],
/*@より後の値を取得する(末尾は適当に長くしている…)*/
substring(mailAddress, charindex('@',mailAddress) + 1, 999) as [ドメインパート]
from
sampleTable
where
/*@が無いものはメールアドレスではないので除いておく*/
mailAddress like '%@%'