首页 > 解决方案 > 使用 SUBSTRING 的 PostgreSql 查询

问题描述

我有一个用户名列表,其中大部分是电子邮件地址。我想查询用户名

  1. 字符数不能超过 20。
  2. 不应包含“@”。

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

有什么最好的建议来处理这个吗?

标签: sqlregexpostgresqlsubstring

解决方案


您可以使用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。


推荐阅读