通过正则表达式在MySQL中解析结果
我对MySQL的正则表达式支持的功能有点困惑,我还没有找到一个在sql语句中如何使用正则表达式分离结果的可靠示例 例如: 我怎么能从一个看起来像通过正则表达式在MySQL中解析结果,mysql,regex,Mysql,Regex,我对MySQL的正则表达式支持的功能有点困惑,我还没有找到一个在sql语句中如何使用正则表达式分离结果的可靠示例 例如: 我怎么能从一个看起来像 +-------------------------+ |Emails | |-------------------------| |Some.email@yourDomain.com| +-------------------------+ 并通过一个sql语句返回如下内容 +------------------
+-------------------------+
|Emails |
|-------------------------|
|Some.email@yourDomain.com|
+-------------------------+
并通过一个sql语句返回如下内容
+------------------------------+
|Username | Domain | TLD |
|-----------|------------|-----|
|some.email | yourdomain | com |
+------------------------------+
MySQL没有内置的功能来满足您的要求。通过定义一些新函数是可能的,但是用任何编程语言访问数据库都可能更容易 但是,对于像电子邮件地址这样简单的内容,您根本不需要使用正则表达式,您可以使用,如下所示: 换句话说,就是: 用户名=第一个“@”之前的所有内容 域=第一个“@”和第一个“.”之间的所有内容 TLD=最后一个“.”之后的所有内容
MySQL没有内置的功能来满足您的要求。通过定义一些新函数是可能的,但是用任何编程语言访问数据库都可能更容易 但是,对于像电子邮件地址这样简单的内容,您根本不需要使用正则表达式,您可以使用,如下所示: 换句话说,就是: 用户名=第一个“@”之前的所有内容 域=第一个“@”和第一个“.”之间的所有内容 TLD=最后一个“.”之后的所有内容 你也可以试试
select substring_index(email, '@', 1) username
,substring_index(substring_index(email, '@', -1), '.',1) domain
,substring_index(email, '.', -1) tld
from
( select 'Some.email@yourDomain.com' email ) E
仅使用子字符串_索引。第一个子串将所有内容索引到“@”的左侧,第三个内部子串将所有内容索引到“@”的右侧,然后第二个子串对其进行解析以获取域,最后一个子串将所有内容拉到“.”的右侧。您也可以尝试
select substring_index(email, '@', 1) username
,substring_index(substring_index(email, '@', -1), '.',1) domain
,substring_index(email, '.', -1) tld
from
( select 'Some.email@yourDomain.com' email ) E
仅使用子字符串_索引。第一个子字符串将所有内容索引到“@”的左侧,第三个内部子字符串将所有内容索引到“@”的右侧,然后第二个子字符串将其解析为域,最后一个子字符串将所有内容拉到“.”的右侧。我的错误,要查找的参数是向后的,我将编辑我的答案以修复它。我的错误,要查找的参数是向后的,我将编辑我的答案以修复它。