我试图基于分隔符email
提取@
字段的左侧。
例如,从以下电子邮件中:root@localhost
我要提取root
。
我写道:
select email, substr(email,1,strpos(email, '@')-1)
from user;
但我得到:
[22011] ERROR: negative substring length not allowed
如何在函数中创建子字符串?
答案 0 :(得分:1)
答案 1 :(得分:0)
使用strpos
函数但未在字符串中找到字符时。
我将使用POSITION函数来获取包机位置并执行子字符串来获取值,因为如果找不到字符,它将返回0
而不是错误。
CREATE TABLE T(
email varchar(50)
);
insert into t values ('aa@gmmail.com');
insert into t values ('11.com');
insert into t values ('test@gmmail.com');
查询1 :
select CASE WHEN POSITION('@' in email) > 0 THEN
substr(email,1,POSITION('@' in email)-1)
ELSE ''
END
FROM T
Results :
| case |
|------|
| aa |
| |
| test |
答案 2 :(得分:0)
我通常只需在末尾添加@
即可解决此问题:
select email, substr(email, 1, strpos(email || '@', '@') - 1)
from user;
或以下替代方法之一:
select email, left(email, strpos(email || '@', '@') - 1)
select email, substring(email from '^[^@]*')