用于拆分电子邮件的sql查询

用于拆分电子邮件的sql查询,sql,Sql,输入:- 我希望输出为 column email: kiran.paluri@live.com shree.lavanya@gmail.com krsna.kumar@yahoo.com 下面是一个函数,它可以为您进行解析,如果域之前没有句点,则会考虑到这一点。下面是一个如何利用它的例子 正如Gordon提到的,我不确定您引用的是哪一个数据库,因此我假设使用SQL Server来回答这个问题 firstname lastname domain kiran

输入:-

我希望输出为

column email:
kiran.paluri@live.com
shree.lavanya@gmail.com
krsna.kumar@yahoo.com

下面是一个函数,它可以为您进行解析,如果域之前没有句点,则会考虑到这一点。下面是一个如何利用它的例子

正如Gordon提到的,我不确定您引用的是哪一个数据库,因此我假设使用SQL Server来回答这个问题

firstname    lastname        domain
kiran          paluri          live
shree          lavanya         gmail  
krsna          kumar           yahoo 
功能的利用:

CREATE FUNCTION dbo.splitEmail ( @email VARCHAR(MAX) )
RETURNS
 @ret TABLE ([FirstName] VARCHAR(MAX), [LastName] VARCHAR(MAX), [Domain] VARCHAR(MAX))
AS
BEGIN

    DECLARE @dotIndex INT, @atIndex INT
    SELECT @atIndex=CHARINDEX('@',@email)
    SELECT @dotIndex=CHARINDEX('.', LEFT(@email, @atIndex))

    DECLARE @first VARCHAR(MAX), @last VARCHAR(MAX), @domain VARCHAR(MAX)
    SELECT @first = CASE WHEN @dotIndex > 0 THEN SUBSTRING(@email, 0, @dotIndex) ELSE SUBSTRING(@email, 0,@atIndex) END
    SELECT @last = CASE WHEN @dotIndex > 0 THEN SUBSTRING(@email, @dotIndex + 1, @atIndex - @dotIndex - 1) ELSE NULL END
    SELECT @domain = SUBSTRING(@email, @atIndex + 1, LEN(@email) - @atIndex)

    INSERT INTO @ret([FirstName],[LastName],[Domain])
    VALUES (@first, @last, @domain)

    RETURN
END

用你正在使用的数据库标记你的问题。可能重复
DECLARE @tbl TABLE (email VARCHAR(MAX))
INSERT INTO @tbl VALUES ('first.last@domain.com')
INSERT INTO @tbl VALUES ('john.smith@overthere.com')
INSERT INTO @tbl VALUES ('firstonly@contoso.com')

SELECT *
FROM @tbl AS t
    CROSS APPLY dbo.splitEmail(t.email)