用于拆分电子邮件的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)