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

PostgreSQL中LEFT与RIGHT函数用@位置返回结果不一致咨询

问题原因解析

首先你搞混了RIGHT()函数的参数含义:

  • LEFT(string, n):从字符串左侧取前n个字符
  • RIGHT(string, n):从字符串右侧取后n个字符

你用POSITION('@' IN email)作为RIGHT()的第二个参数,这个值是@在邮箱里从左数的位置(比如abc@xyz.com里@在第4位),RIGHT()会从邮箱末尾开始取对应数量的字符,结果自然和域名不沾边,而且每个邮箱的@位置不同,返回结果当然每条都不一样。

另外你的LEFT()其实也有小问题:LEFT(email, POSITION('@' IN email))会把@也包含进去(比如返回abc@而不是abc),正确的用户名提取应该是LEFT(email, POSITION('@' IN email) - 1)。

更简单的替代方案

PostgreSQL里直接用SPLIT_PART()拆分邮箱更省心,不用手动计算位置:

  • 提取用户名:SPLIT_PART(email, '@', 1)
  • 提取域名:SPLIT_PART(email, '@', 2)

这个函数会按@把字符串拆成对应部分,直接取目标段即可,比用LEFT/RIGHT+POSITION的组合更简洁可靠。

内容的提问来源于stack exchange,提问作者Nathan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:09:52