[英]Extracting First_name & Last_name from email oracle using Reg_exp
How to extract First_name & last_name from email using oracle REGEXP_SUBSTR,如何使用 oracle REGEXP_SUBSTR 从电子邮件中提取名字和姓氏,
Email: susan.ryan@email.com
电子邮件:
susan.ryan@email.com
Expected output:预期输出:
First_name![]() |
Last_name![]() |
---|---|
susan![]() |
ryan![]() |
select
substr('susan.ryan@email.com',1,(INSTR('susan.ryan@email.com','.')-1)) first_name,
substr('susan.ryan@email.com',(INSTR('susan.ryan@email.com','.')+1),(INSTR('susan.ryan@email.com','@'))) last_name
from dual;
But i'm getting result as但我得到的结果是
first_name![]() |
Last_name![]() |
---|---|
susan![]() |
ryan@email.![]() |
You have你有
substr(email, instr(email, '.') + 1, instr(email, '@')) as last_name
But the second parameter is not the end position, but the requested length, so you must subtract the position of the dot:但是第二个参数不是结束位置,而是请求的长度,所以必须减去点的位置:
substr(email, instr(email, '.') + 1, instr(email, '@') - instr(email, '.') - 1) as last_name
That's easier with REGEXP_SUBSTR
by the way:顺便说一下,使用
REGEXP_SUBSTR
更容易:
regexp_substr(email, '[[:alpha:]]+', 1, 1) as first_name,
regexp_substr(email, '[[:alpha:]]+', 1, 2) as last_name
We are looking for substrings that only consist of letters in the e-mail here.我们在这里寻找仅由电子邮件中的字母组成的子字符串。 For first_name we are taking the first such string, for last_name the second one.
对于 first_name 我们取第一个这样的字符串,对于 last_name 取第二个。 This relies of course on all e-mails in your table equally consisting of firstname.lastname@domain.
这当然依赖于您表中的所有电子邮件均由 firstname.lastname@domain 组成。
Here is the docs on REGEXP_SUBSTR
: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/REGEXP_SUBSTR.html#GUID-2903904D-455F-4839-A8B2-1731EF4BD099这是
REGEXP_SUBSTR
上的文档: https : REGEXP_SUBSTR
Here are some examples of how to do this.以下是有关如何执行此操作的一些示例。 First remove the domain using
SUBSTR
(column "domain") or REGEXP
(column "domain_regexp"), then split the portion before the domain (column "no_domain") using REGEXP_SUBSTR
:首先使用
SUBSTR
(列“域”)或REGEXP
(列“domain_regexp”)删除域,然后使用REGEXP_SUBSTR
拆分域(列“no_domain”)之前的部分:
WITH samples AS
(
SELECT '-susan.ryan@email.com' as str FROM DUAL UNION
SELECT 'roger@email.com' as str FROM DUAL
)
SELECT
str as email,
REGEXP_SUBSTR(str,'@.+$') AS domain_regexp,
SUBSTR(str, INSTR(str,'@')) as domain,
SUBSTR(str, 1, INSTR(str,'@') - 1) as no_domain,
REGEXP_SUBSTR(SUBSTR(str, 1, INSTR(str,'@') - 1),'[^.]+',1,1) AS first_name,
REGEXP_SUBSTR(SUBSTR(str, 1, INSTR(str,'@') - 1),'[^.]+',1,2) AS last_name
from samples;
EMAIL DOMAIN_REGEXP DOMAIN NO_DOMAIN FIRST_NAME LAST_NAME
--------------------- --------------------- --------------------- --------------------- --------------------- ---------------------
-susan.ryan@email.com @email.com @email.com -susan.ryan -susan ryan
roger@email.com @email.com @email.com roger roger
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.