sql - 使用 SUBSTRING 的 PostgreSql 查询
问题描述
我有一个用户名列表,其中大部分是电子邮件地址。我想查询用户名
- 字符数不能超过 20。
- 不应包含“@”。
SELECT username, SUBSTRING(SUBSTRING(username,1,strpos(username,'@')),1,20) uname from a.user_profile GROUP BY username;
这将返回带有“@”符号的值。并且没有获得非电子邮件 ID 用户名。
用户名 | 无名 |
---|---|
abc.cde@pqrst.com | abc.cde@ |
efg.hij@xyz.com | efg.hij@ |
测试1 |
当我尝试
SELECT username, SUBSTRING(SUBSTRING(username,1,strpos(username,'@')-1),1,20) uname from a.user_profile GROUP BY username;
这会影响不是电子邮件地址的用户名。并返回错误ERROR: negative substring length not allowed
有什么最好的建议来处理这个吗?
解决方案
您可以使用split_part()
获取用户名的第一部分:
select split_part(username, '@', 1) as uname
from (values ('abc.cde@pqrst.com'), ('test1')) v(username);
如果您只需要 20 个字符,请输入substr()
或left()
:
select substr(split_part(username, '@', 1), 1, 20) as uname
from (values ('abc.cde@pqrst.com'), ('test1')) v(username);
这是一个 db<>fiddle。
推荐阅读
- javascript - 为什么箭头函数会导致 Angular JS 中该函数中存在“this”关键字的错误?
- android - 如何在我的所有其他应用程序(如亚马逊)中进行单次登录
- c# - 电子邮件未送达
- javascript - 结合两个docker镜像,防止docker inside docker
- reactjs - 更新嵌套状态对象中的单个记录,react-redux
- r - 使用 geom_smooth 添加回归线以绘制 R 中的离散 x 轴
- reactjs - 在基于类的组件中初始化反应钩子
- github - 无法在只读编辑器 Codesandbox 中编辑
- c# - 如何让滚动视图只影响内部框架,而不是整个应用程序
- pandas - 如何在 seaborn 散点图中绘制核密度估计