使用Ms SQL从电子邮件ID中提取用户名和用户名

使用Ms SQL从电子邮件ID中提取用户名和用户名,sql,sql-server,Sql,Sql Server,我需要你的支持,今天我有一个场景,我需要这样做 该场景是包含用户名和id的电子邮件,需要拆分并插入到表中的两个不同列中,即用户id、用户名 ex:ABC123@xyz.com, AAACC2356@mnc.com ABC将插入username列下的表中,123将插入userid列中 谢谢 Narendra您可以使用以下几个功能完成此操作: DECLARE @exp VARCHAR(1000) = 'AAACC2356@mnc.com'--'ABC123@xyz.com' --finds whe

我需要你的支持,今天我有一个场景,我需要这样做

该场景是包含用户名和id的电子邮件,需要拆分并插入到表中的两个不同列中,即用户id、用户名

ex:ABC123@xyz.com, AAACC2356@mnc.com

ABC将插入username列下的表中,123将插入userid列中

谢谢


Narendra

您可以使用以下几个功能完成此操作:

DECLARE @exp VARCHAR(1000) = 'AAACC2356@mnc.com'--'ABC123@xyz.com'

--finds where numbers starts
DECLARE @SplitPoint INT = (SELECT PATINDEX ( '%[0-9]%' , @exp ))
--finds where is @ sign
DECLARE @etaPoint INT = (SELECT PATINDEX ( '%@%' , @exp ))

--gets username
SELECT SUBSTRING(@exp, 0, @SplitPoint)
--gets number
SELECT SUBSTRING(@exp, @SplitPoint, @etaPoint-@SplitPoint)
您可以尝试以下方法:

DECLARE @Email VARCHAR(100)= 'sample12312@test.com'

SET @Email = STUFF(@Email,CHARINDEX('@',@Email),LEN(@Email), '')
SELECT  SUBSTRING(@Email, 1, PATINDEX('%[0-9]%',@Email)-1) AS Username,
        SUBSTRING(@Email,PATINDEX('%[0-9]%',@Email), LEN(@Email)) AS UserID


所有电子邮件地址都采用这种格式?除非用户名和用户ID之间有明显的分隔符,否则无法直接在SQL中完成此操作。感谢所有有价值的反馈
SELECT  SUBSTRING(@Email, 1, PATINDEX('%[0-9]%',@Email)-1) AS Username,,
        SUBSTRING(STUFF(@Email,CHARINDEX('@',@Email),LEN(@Email), ''), PATINDEX('%[0-9]%',@Email), LEN(@Email)) AS UserID
Declare @X     varchar(100)
Select     @X=    'AAACC2356@mnc.com'

Select     @X=    SubString(@X,PATINDEX('%[0-9]%',@X),Len(@X))
Select     @X=    SubString(@X,0,PATINDEX('%[^0-9]%',@X))
Select     @X

Declare @Y    varchar(100)
Select     @Y =    'AAACC2356@mnc.com'

Select     @Y=    SubString(@Y,PATINDEX('%[A-Z]%',@Y),Len(@Y))
Select     @Y=    SubString(@Y,0,PATINDEX('%[^A-Z]%',@Y))
Select     @Y