You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中按@拆分mail字段并选取拆分后的首段值?

在SQL中拆分mail字段提取@前的部分

嘿,刚好我对这个场景很熟悉!在SQL里要拆分mail字段、提取@符号前面的部分作为别名列,不同数据库有不同的简洁实现方式,我给你一一列出来:

MySQL/MariaDB

用SUBSTRING_INDEX函数就搞定了,这个函数天生就是用来处理按分隔符截取的场景,非常省心:

SELECT 
    mail,
    SUBSTRING_INDEX(mail, '@', 1) AS username
FROM your_table;

小提示:如果mail字段里没有@符号,这个函数会直接返回整个mail值,不用额外处理空值报错的问题。

PostgreSQL

PostgreSQL用SPLIT_PART函数更直接,逻辑清晰:

SELECT 
    mail,
    SPLIT_PART(mail, '@', 1) AS username
FROM your_table;

这个函数的作用是把字段按指定分隔符拆分成多个部分,然后取第N个部分,这里填1就刚好拿到@前面的内容。

SQL Server

SQL Server没有专门的拆分截取函数,但可以组合CHARINDEX和LEFT来实现:

SELECT 
    mail,
    LEFT(mail, CHARINDEX('@', mail) - 1) AS username
FROM your_table
WHERE CHARINDEX('@', mail) > 0; -- 可选,用来过滤不含@的无效邮箱

如果要兼容没有@的情况,避免报错,可以加个CASE判断:

SELECT 
    mail,
    CASE 
        WHEN CHARINDEX('@', mail) > 0 THEN LEFT(mail, CHARINDEX('@', mail) - 1)
        ELSE mail
    END AS username
FROM your_table;

Oracle

Oracle可以用INSTR定位@的位置,再配合SUBSTR截取:

SELECT 
    mail,
    SUBSTR(mail, 1, INSTR(mail, '@') - 1) AS username
FROM your_table
WHERE INSTR(mail, '@') > 0;

同样,要处理无@的场景,用CASE分支就可以:

SELECT 
    mail,
    CASE 
        WHEN INSTR(mail, '@') > 0 THEN SUBSTR(mail, 1, INSTR(mail, '@') - 1)
        ELSE mail
    END AS username
FROM your_table;

内容的提问来源于stack exchange,提问作者Toni Michel Caubet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:04:53