我有一个表,该表的列包含如下所示的字符串。
我需要从@到。(点)获取子字符串。我已经写了一些sql,但是它有固定的长度,我需要动态查询来获取子字符串。
从注册中选择*,例如“%@%”之类的电子邮件;
子字符串查询从注册中选择电子邮件,substr(email,4,10);
请给我一个查询。
这应该做:
SELECT REVERSE(SUBSTRING(REVERSE(SUBSTRING_INDEX(email, '@', -1)), LOCATE('.', REVERSE(email))+1));
这将包括@和最后一个点之间的所有点(例如,“ [email protected]”将导致“ a.long.domain.name”),而不是嵌套的SUBSTRING_INDEX,后者只会返回@和第一个点之间是什么(例如“ a”)。
substring_index()
是最好的方法:
select substring_index(substring_index(email, '@', -1), '.', 1)