(注意数据库是荷兰语的,所以不要介意奇怪的名称。(
我试图创建的查询应该显示电子邮件地址中最后一个点('.'(之前的所有字符。但我使用的查询(当然不起作用(显示了以下数据。
SELECT LEFT(mailadres, LENGTH(substring_index(mailadres, '.', 2))+1) AS edited_values, mailadres
FROM reviewers
邮件地址值:
- Brechtje.Eefting@hotmail.
- Martijn.Rokx@gmail.
- Rosemijn.Stegers@gmail.
- Ans.Vogelaar@gmail.
- 翻转.van
- Dirck.Boesten@gmail.
- Kobus.van
- 里克特.van
- 洛伦斯.van
正如您所看到的,对于某些值,它可以完成任务,但不是我想要的。我真正想看到的值应该是这样的:
- Brechtje.Eefting@hotmail.
- Martijn.Rokx@gmail.
- Rosemijn.Stegers@gmail.
- Ans.Vogelaar@gmail.
- Flip.van.Korsten@gmail.
- Dirck.Boesten@gmail.
- Kobus.van.Dijkstra@gmail.
- Rikkert.van.Hogen@gmail.
查询应该如何获得上述结果?
如果您想要最后一个.
,您应该使用带substraing_index:的负计数
left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))
请注意,如果不存在.
,则此substring_index将返回整个字符串,从而导致两个长度相等,并且left
被要求0个字符,并因此给出一个空字符串。如果你想在没有.
的情况下返回整个邮件地址,你必须明确检查:
if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres)
所以完整:
SELECT
if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres) AS edited_values,
mailadres
FROM reviewers
您可以使用regexp_replace()
:
select regexp_replace(email, '^(.*[.])[^.]*$', '$1')