我有一个字符串[email protected]
,我想将字符串解析为3列。
我尝试了使用RTRIM
,SUBSTR
和REGEXP_SUBSTR
的几种变体没有成功。任何帮助都会有所帮助。
使用Parsename,Charindex,Right和Replace MSSQL 2012+(用于Parsename函数)
declare @myemail varchar(50) = '[email protected]'
select parsename(replace(@myemail,right(@myemail,charindex('@',reverse(@myemail))),''),2) [firstname],
parsename(replace(@myemail,right(@myemail,charindex('@',reverse(@myemail))),''),1) [Lastname],
right(@myemail,charindex('@',reverse(@myemail))) [Domain]
您尚未指定您正在使用的数据库,因此我将在SQL Server中回答此问题:
SELECT SUBSTRING(q.email, 1, CHARINDEX('.', q.email) - 1) AS firstname,
SUBSTRING(q.email, CHARINDEX('.', q.email) + 1, CHARINDEX('@', q.email) - CHARINDEX('.', q.email) - 1) AS lastname,
SUBSTRING(q.email, CHARINDEX('@', q.email) + 1, LEN(q.email)) AS domain
FROM (SELECT '[email protected]' AS email) q
这是一个fiddle。我只是为了演示而硬编码表,但当然你会从你自己的表中选择。此查询假定所有数据都遵循相同的模式。
如果你更喜欢使用LEFT
和RIGHT
:
SELECT LEFT(q.email, CHARINDEX('.', q.email) - 1) AS firstname,
SUBSTRING(q.email, CHARINDEX('.', q.email) + 1, CHARINDEX('@', q.email) - CHARINDEX('.', q.email) - 1) AS lastname,
RIGHT(q.email, LEN(q.email) - CHARINDEX('@', q.email)) AS domain
FROM (SELECT '[email protected]' AS email) q
这是一个fiddle。
有几种方法可以做到这一点。像其他人提到的那样,它还取决于您正在处理的数据库。
这是使用SUBSTR,INSTR,REVERSE,LENGTH函数组合的oracle版本。
SELECT '[email protected]' "FULL NAME" ,
SUBSTR('[email protected]', 0, (INSTR('[email protected]', '.')-1) ) "FIRST NAME ",
SUBSTR('[email protected]' , (INSTR('[email protected]' , '.')+1), LENGTH(SUBSTR('[email protected]', (INSTR('[email protected]', '.')+1) )) - INSTR(REVERSE('[email protected]'), '@')) as "LAST NAME",
SUBSTR('[email protected]' , (INSTR('[email protected]', '@')+1)) "DOMAIN NAME"
FROM DUAL
希望这可以帮助!