SQL将字符串解析为字段

问题描述 投票:0回答:3

我有一个字符串[email protected],我想将字符串解析为3列。

  • 第1列 - 名字
  • 第2栏 - 姓氏
  • 第3列 - domain.com

我尝试了使用RTRIMSUBSTRREGEXP_SUBSTR的几种变体没有成功。任何帮助都会有所帮助。

sql
3个回答
0
投票

使用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]

0
投票

您尚未指定您正在使用的数据库,因此我将在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。我只是为了演示而硬编码表,但当然你会从你自己的表中选择。此查询假定所有数据都遵循相同的模式。

如果你更喜欢使用LEFTRIGHT

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


0
投票

有几种方法可以做到这一点。像其他人提到的那样,它还取决于您正在处理的数据库。

这是使用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

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.