@の位置を取得して、その前後を取得すれば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 '%@%'