首页 > 解决方案 > 我想在 SQL Server 中获取 @ 之前和任何其他特殊字符或空格之后的字符串

问题描述

我想在 SQL 服务器中拆分字符串并获取 @ 之前和任何其他特殊字符之后的值。

Example 1: I have a string     
abc.123.vet@xyz.com     
Expected output: vet

Example 2: aaa@yy.com  
Expected output: aaa

Example 3: aaa bte@yy.com  
Expected output: bte

我努力了:

代码片段#1:

DECLARE @email VARCHAR(100)
SET @email = 'firstname.lastname@email.com'

SELECT SUBSTRING(@email, 0, CHARINDEX('@', @email))

代码片段#2:

DECLARE @emai1l VARCHAR(100)
SET @emai1l = 'first.name.lastname@email.com'

SELECT SUBSTRING(SUBSTRING(@emai1l, 0, CHARINDEX('@', @emai1l)), 0, CHARINDEX('.', @emai1l))

标签: sqlsql-serverregexsplit

解决方案


SQL Server 不是这种类型的字符串操作的最佳选择。但是,这是一种方法:

select t.str, v.str,
       right(v.str,
             patindex('%[, .]%', reverse(v.str) + ' ') - 1
            ) as result
from (values ('abc.123.vet@xyz.com'), ('aaa@yy.com'), ('aaa bte@yy.com')
     ) t(str) cross apply
     (values (left(t.str, charindex('@', t.str) - 1))
     ) v(str) ;

是一个 db<>fiddle。


推荐阅读