只显示字符串的一部分
Display only a part of a string
我正在选择一个电子邮件地址,但我不想显示完整的电子邮件地址。只有'@'之前的部分。怎么剪啊。我知道如何只显示一定数量的字符或数字。但是我如何指定只显示到'@'符号。
谢谢。
最新版本的 Informix SQL 具有 CHARINDEX()
函数,可用于隔离“@”符号出现的位置:
SELECT LEFT(email_addr, CHARINDEX('@', email_addr)-1)
如果未找到,CHARINDEX() 将 return 0,否则为找到的字符串的序号位置。我的测试发现 LEFT()
不会抱怨传递 0 或 -1,因此按原样执行它是安全的,您不必先验证是否从 CHARINDEX()
得到了返回值。
CREATE TEMP TABLE ex1
(
email_addr VARCHAR(60)
) WITH NO LOG;
INSERT INTO ex1 VALUES ('ret@example.com.au');
INSERT INTO ex1 VALUES ('emdee@gmail.com');
INSERT INTO ex1 VALUES ('unknown');
INSERT INTO ex1 VALUES (NULL);
INSERT INTO ex1 VALUES ('@bademail');
SELECT LEFT(email_addr, CHARINDEX('@', email_addr)-1) FROM ex1
... 产生:
(expression)
ret
emdee
5 row(s) retrieved.
如果您有不支持 CHARINDEX()
的旧版本 Informix,您将被迫逐个字符地遍历字符串,直到找到“@”符号。
我正在选择一个电子邮件地址,但我不想显示完整的电子邮件地址。只有'@'之前的部分。怎么剪啊。我知道如何只显示一定数量的字符或数字。但是我如何指定只显示到'@'符号。
谢谢。
最新版本的 Informix SQL 具有 CHARINDEX()
函数,可用于隔离“@”符号出现的位置:
SELECT LEFT(email_addr, CHARINDEX('@', email_addr)-1)
如果未找到,CHARINDEX() 将 return 0,否则为找到的字符串的序号位置。我的测试发现 LEFT()
不会抱怨传递 0 或 -1,因此按原样执行它是安全的,您不必先验证是否从 CHARINDEX()
得到了返回值。
CREATE TEMP TABLE ex1
(
email_addr VARCHAR(60)
) WITH NO LOG;
INSERT INTO ex1 VALUES ('ret@example.com.au');
INSERT INTO ex1 VALUES ('emdee@gmail.com');
INSERT INTO ex1 VALUES ('unknown');
INSERT INTO ex1 VALUES (NULL);
INSERT INTO ex1 VALUES ('@bademail');
SELECT LEFT(email_addr, CHARINDEX('@', email_addr)-1) FROM ex1
... 产生:
(expression)
ret
emdee
5 row(s) retrieved.
如果您有不支持 CHARINDEX()
的旧版本 Informix,您将被迫逐个字符地遍历字符串,直到找到“@”符号。